Попытка пинговать гугл и если нет ответа отключить / включить интерфейс - PullRequest
1 голос
/ 12 мая 2019

Когда я запускаю свой компьютер, у меня не всегда есть интернет сразу.Я перепробовал много вещей, но так и не нашел окончательного решения своей проблемы.Итак, что я делаю сейчас - это пинг хоста.Если я не могу добраться до него, я отключаю и включаю свою сетевую карту.

У меня есть небольшой командный файл, который отключает и включает интерфейс.Но я хотел бы создать командный файл, который запускается при запуске, проверяет мой пинг и, если нет ответа, отключает / включает мой сетевой интерфейс.

Правильно ли указан этот код?

@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
)

Я пробовал это однажды, но, похоже, не видел пинг или что-то в моей командной строке.

1 Ответ

1 голос
/ 13 мая 2019
@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
)

Возможно, вы не видите работу пинга, поскольку -n 1 может быть быстрым до ping, если соединение в порядке.Шаблон findstr кажется разумным и обнаруживает, например, 9ms.

Я изменил ping на -n %requests%, так что успех основан на заданном количестве запросов, равном количеству ответов * 1010.* слово Reply.Если не запрашивает равных ответов, то считается ошибочным.Если вы не хотите просматривать вывод ping, то удалите строку echo %%A.

Исправлен код VBScript с использованием кавычек, и модификаторы немного изменились.Я распаковал код в несколько строк, чтобы его было легче просматривать.

Изменено fsutil dirty query %systemdrive% на net session для определения пользователя с правами администратора.

Не уверен, зачем вам нужен текущий каталогхотя я решил просто оставить их внутри. Возможно, вы писали getadmin.vbs в текущий каталог и, таким образом, это было необходимо.

...