尝试 ping google,如果没有响应 disable/enable 接口

Trying to ping google and if no respons disable/enable interface

当我启动我的计算机时,我并不总是立即连接到互联网。我尝试了很多东西,但从未找到解决我问题的明确方法。所以我现在要做的是 ping 一台主机。如果我无法访问它,那么我会禁用并启用我的网卡。

我有一个禁用和启用界面的小批处理文件。 但我想创建一个在启动时启动的批处理文件,测试我的 ping,如果没有响应,那么将 disable/enable 我的网络接口。

此代码正确吗?

@echo on
set "host=google.com"

ping -n 1 "%host%" | findstr /r /c:"[0-9] *ms"

if %errorlevel% == 0 (
    echo Success.
) else (
    set "params=%*"
    cd /d "%~dp0" && ( if exist "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" ) && fsutil dirty query %systemdrive% 1>nul 2>nul || (  echo Set UAC = CreateObject^("Shell.Application"^) : UAC.ShellExecute "cmd.exe", "/k cd ""%~sdp0"" && %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" && "%temp%\getadmin.vbs" && exit /B )
    @echo on
    netsh interface set interface "Ethernet 2" DISABLED
    timeout /t 10
    netsh interface set interface "Ethernet 2" ENABLED
)

我试过一次,但在我的命令提示符下似乎没有看到 ping 动作或任何东西。

@echo off
setlocal

set "host=google.com"
set "requests=4"
set "replies=0"

for /f "delims=" %%A in ('ping -n %requests% %host%') do (
    echo %%A
    echo(%%~A | find "Reply" >nul 2>nul && set /a "replies+=1"
)

if %requests% equ %replies% (
    echo Success.
) else (
    cd /d "%~dp0" && (
        if exist "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs"

        net session 1>nul 2>nul || (
            (
                echo Set UAC = CreateObject("Shell.Application"^)
                echo UAC.ShellExecute "cmd.exe", "/k cd ""%~dp0"" && ""%~f0"" %*", "", "runas", 1
            ) > "%temp%\getadmin.vbs"

            "%temp%\getadmin.vbs"
            exit /b 0
        )
    )

    netsh interface set interface "Ethernet 2" DISABLED
    timeout /t 10
    netsh interface set interface "Ethernet 2" ENABLED
)

也许你没有看到 ping 工作,因为 -n 1 可以很快 到 ping 如果连接正常。 findstr 模式 似乎合理并检测到即 9ms.

我将 ping 更改为 -n %requests% 这样就成功了 基于设置的请求数量等于 回复 find 这个词 Reply。如果不要求相等 回复,则视为失败。如果您不想查看 ping 的输出,然后删除行 echo %%A.

使用引号和修饰符调整了 VBScript 代码 改变了一点。我把代码解压到 multi-line 到 使其更易于查看。

已将 fsutil dirty query %systemdrive% 更改为 net session 用于管理员用户检测。

不确定为什么需要设置当前目录 我决定把它们留在里面。也许你在写 getadmin.vbs 到当前目录,因此是一个 需要。