Пакетный ответ с ошибкой ping - PullRequest
10 голосов
/ 17 февраля 2012

Я пытаюсь использовать командный файл для подтверждения сетевого подключения с помощью ping. Я хочу сделать пакетный запуск, а затем распечатать, если пинг прошел успешно или нет. Проблема в том, что он всегда отображает «сбой» при запуске как пакет. Вот код:

@echo off
cls
ping racer | find "Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),"
if not errorlevel 1 set error=success
if errorlevel 1 set error=failure
cls
echo Result: %error%
pause

'гонщик' - это имя моего компьютера. У меня сам компьютер пингует, чтобы я мог устранить переменную плохого соединения. Как я уже говорил, партия всегда приводит к провалу Как ни странно, программа работает нормально, если я скопирую код в командную строку. Кто-нибудь знает, почему программа отлично работает в командной строке, но не работает как пакет? Спасибо

Ответы [ 13 ]

0 голосов
/ 24 июля 2013

ping имеет выходное значение уровня ошибки.Успешность равна 0, неудача равна 1. Просто сделайте это:

C:\>ping 4.2.2.2

Pinging 4.2.2.2 with 32 bytes of data:

Reply from 4.2.2.2: bytes=32 time=28ms TTL=57
Reply from 4.2.2.2: bytes=32 time=29ms TTL=57
Reply from 4.2.2.2: bytes=32 time=30ms TTL=57
Reply from 4.2.2.2: bytes=32 time=29ms TTL=57

Ping statistics for 4.2.2.2:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 28ms, Maximum = 30ms, Average = 29ms

C:\>echo %errorlevel%
0

C:\>ping foo.bar
Ping request could not find host foo.bar. Please check the name and try again.

C:\>echo %errorlevel%
1

Как видите, нет необходимости во всем этом перерасходе сценариев.

0 голосов
/ 11 июля 2013

Прежде всего

>@echo off
>for /f %%i in ('ping racer ^| find /c "(0%% loss)"') do SET MATCHES=%%i
>echo %MATCHES%

не работает. Если он не потерпит неудачу, он обнаружит 0%, потому что у него 0%. Если он терпит неудачу, тоже не работает, потому что он будет иметь 100% потерь, что означает, что он нашел часть потерь 0% за 10 10 (потеря 0%)

Пусть он обнаружит потерю 100% следующим образом:

>for /f %%i in ('ping  -n 1 -l 1 %pc% ^| find /c "(100%% loss)"') do SET check=%%i

Уровень ошибки может быть немного испорчен, но он работает как шарм:

>if '%check%'=='1' goto fail
>if '%check%'=='0' echo %pc% is online.&goto starting

1 означает, что это не удалось 0 означает, что это удалось

В моем скрипте есть ссылки. Goto fail будет означать: fail в моем скрипте, который сообщит мне, что% pc% (который я буду вводить пользователем в начале) находится в автономном режиме и пойдет на другой запуск.

>:fail
>color 0c
>title %pc% is offline
>echo %pc% is offline
>PING -n 6 127.0.0.1>nul
>goto choice

Надеюсь, это поможет.

0 голосов
/ 11 декабря 2012

Судя по примечанию Алекса К, это работает для меня в Windows 7:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f %%i in (PCS.TXT) do (
   SET bHOSTUP=0
   ping -n 2 %%i |find "TTL=" > NUL && SET bHOSTUP=1
   IF !bHOSTUP! equ 1 (
      CALL :HOSTUP %%i
   ) else (
      CALL :HOSTDOWN %%i 
   )
)
GOTO EOF

:HOSTUP
echo Host UP %1
GOTO EOF

:HOSTDOWN
echo Host DOWN %1
GOTO EOF

:EOF
exit /B
...