Il seguente programma checklink.cmd
è un buon punto di partenza. Essa si basa sul fatto che si può fare un ping colpo singolo e che, in caso di successo, l'uscita conterrà la riga:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Estraendo gettoni 5 e 7 e controllando che stanno rispettivamente "Received"
e "1,"
, puoi scoprire il successo.
@setlocal enableextensions enabledelayedexpansion
@echo off
set ipaddr=%1
:loop
set state=down
for /f "tokens=5,6,7" %%a in ('ping -n 1 !ipaddr!') do (
if "x%%b"=="xunreachable." goto :endloop
if "x%%a"=="xReceived" if "x%%c"=="x1," set state=up
)
:endloop
echo.Link is !state!
ping -n 6 127.0.0.1 >nul: 2>nul:
goto :loop
endlocal
Chiamata con il nome (o indirizzo IP) che si desidera verificare:
checklink 127.0.0.1
checklink localhost
checklink nosuchaddress
tener conto che, se le impostazioni internazionali non è l'inglese, è necessario sostituire Received
con la parola chiave corrispondente le impostazioni internazionali, ad esempio recibidos
per lo spagnolo. Esegui un ping di prova per scoprire quale parola chiave viene utilizzata nelle impostazioni locali.
Per solo una notifica quando lo stato cambia, è possibile utilizzare:
@setlocal enableextensions enabledelayedexpansion
@echo off
set ipaddr=%1
set oldstate=neither
: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
)
if not !state!==!oldstate! (
echo.Link is !state!
set oldstate=!state!
)
ping -n 2 127.0.0.1 >nul: 2>nul:
goto :loop
endlocal
Tuttavia, come sottolinea Gabe in un commento, si può semplicemente utilizzare ERRORLEVEL
così l'equivalente di questo secondo script sopra diventa:
@setlocal enableextensions enabledelayedexpansion
@echo off
set ipaddr=%1
set oldstate=neither
:loop
set state=up
ping -n 1 !ipaddr! >nul: 2>nul:
if not !errorlevel!==0 set state=down
if not !state!==!oldstate! (
echo.Link is !state!
set oldstate=!state!
)
ping -n 2 127.0.0.1 >nul: 2>nul:
goto :loop
endlocal
non è vero in generale offrirti tornato con i byte xx di dati? – Sphvn
Ma stavo chiedendo come controllarlo all'interno di una condizione if in un file batch – IsmailS
Questa domanda è diventata popolare (è stata visualizzata 1000 volte) e non ci sono molti aumenti rispetto alla domanda e alle risposte. Mi fa intuire che i visitatori stanno arrivando in questa pagina per qualcos'altro e non trovandolo qui. In altre parole, immagino che questa pagina sia visualizzata nei risultati di ricerca di alcune parole chiave irrilevanti a questa domanda. Mi chiedo cosa sia qualcos'altro (o parole chiave irrilevanti a questa domanda) e come posso cambiare il titolo di questa domanda in modo che il tempo del visitatore (che si aspetta qualcosa di diverso) venga salvato. – IsmailS