#batch-file #cmd #ping
#пакетный файл #cmd #свист
Вопрос:
я хочу проверить с помощью простого пакетного скрипта, можно ли пинговать компьютер или нет. В каком-то случае я неправильно ввел и имя хоста неверно, но в качестве обратной связи приходит «Успешно».
@echo off REM stor.bat: ping -n 1 %1 | find "TTL=" gt;nul if errorlevel 1 ( echo Reachable explorer.exe \%1c$ ) else ( echo Not reachable )
Ответ №1:
ваша команда основана на поиске «TTL=», который работает для номеров ip4, так что это должно сработать
@echo off REM stor.bat: ping -n 1 %1 | find "TTL=" if %errorlevel%==0 (echo Reachable amp; explorer.exe \%1c$) else (echo Not reachable amp; pause)
так
stor 127.0.0.1 Reply from 127.0.0.1: bytes=32 timelt;1ms TTL=128 Reachable
но пинг не идеален с именами см. Этот ответ, где успех не показан
stor advent Not reachable
однако ping -n 1 advent
не возвращает никакого намека на «TTL».
Pinging ADVENT [fe80::6467:ace9:6aef:cb1a] with 32 bytes of data: Reply from fe80::6467:ace9:6aef:cb1a: time=1ms Ping statistics for fe80::6467:ace9:6aef:cb1a: Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 1ms, Maximum = 1ms, Average = 1ms
один из методов — «Найти» что-то в ответ, например, «туда и обратно».
@echo off REM stor.bat: ping -n 1 %1 | find "round trip" if %errorlevel%==0 (echo Reachable amp; explorer.exe \%1c$) else (echo Not reachable amp; pause)
[Редактировать] как напомнил @Stephen, мы можем использовать ваш первый метод, добавив -4 для принудительного TTL=
@echo off REM stor.bat: ping -4 -n 1 %1 | find "TTL=" if %errorlevel%==0 (echo Reachable amp; explorer.exe \%1c$) else (echo Not reachable amp; pause)
Комментарии:
1. принудительно
ping
использовать IP4:ping -4
илиping ... | findstr /c:"(0%%"
идет как с IP4, так и с IP6 (только один%
непосредственно в командной строке)
Ответ №2:
Это batch-file
приведет к пингу хоста, чтобы определить, доступен ли он. Для этого используется ядро PowerShell. Если вы используете только Windows PowerShell, измените pwsh.exe
значение на powershell.exe
.
Помните, что у некоторых хостов может быть отключен ICMP (ping).
Кроме того, если вы неправильно введете имя хоста, которое находится в сети (host02 вместо host01), оно также вернется как успешное.
SET "THEHOST=%1" FOR /F "delims=" %%A IN ('pwsh.exe -NoLogo -NoProfile -Command ^ "if (Test-Connection -TargetName %THEHOST% -Count 1 -Quiet) { 1 } else { 0 }"') DO ( SET /A "ISCONNECTED=%%A" ) IF %ISCONNECTED% EQU 1 ( ECHO The %THEHOST% is connected ) ELSE ( ECHO The %THEHOST% is NOT connected )