@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
в текущий каталог и, таким образом, это было необходимо.