Pause a batch file until a host is reachable (using ping)?

前提是你 提交于 2019-12-08 13:48:37
spooky

from antoher thread on stackoverflow... credit to paxdiablo (find the original post here)

@setlocal enableextensions enabledelayedexpansion
@echo off
set ipaddr=%1
:loop
set state=down
for /f "tokens=5,7" %%a in ('ping -n 1 !ipaddr!') do (
    if "x%%a"=="xReceived" if "x%%b"=="x1," set state=up
)
echo.Link is !state!
ping -n 6 127.0.0.1 >nul: 2>nul:
goto :loop
endlocal

This will give you enough ammo to use and solve your problem

as already mentioned years ago, output of ping is language dependent, so it's not a good idea to rely on a string like Received. The preferred and most reliable method is searching for the string TTL=:

:loop
timeout 2
ping -n 1 %ipaddress% |find "TTL=" || goto :loop
echo Answer received.

|| works as "if previous command (find) wasn't successful, then"

(as for the timeout: never build a loop without some idle time to reduce CPU load)

It works if You translate the "Received" string using the string that your language uses for the word Received (i.e. in Italian is Ricevuti).

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!