Проверьте, является ли имя хоста допустимым или нет в пакетном режиме

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