2017-10-19 5 views
0

Ein bisschen Problem kann ich nicht lösen.Problem mit Sonderzeichen in Batch

In meinen for/f delims Parametern habe ich ein Sonderzeichen < und mein Skript merkt es nicht.

Dieses Skript Test-Netzwerk für IT-Anforderungen. Es protokolliert das Netzwerk und die Geschwindigkeit.

set /p IP="IP : " 
set /p MS="Millisecond : " 
for /f "tokens=1,7 delims==< " %%a in ('ping.exe -w 1000 -n 1 %IP% ^| findstr /i /c:"temps"^|^| echo "Ne Repond Pas"') do (
if "%%b" == "" (
echo "%date% %time:~,8% Ne repond pas" >> log_%IP%.txt 
) ELSE (
    if %%b GEQ %MS% ( 
    echo "%date% %time:~,8% ms=%%b" >> log_%IP%.txt 
    timeout /t 1 > NUL 
) 
) 
) 
goto loop 

Wenn das Ping-Ergebnis < 1ms ist, meldet er in der Datei. Wenn der Ping = 1 ms oder = 2 ms ist, funktioniert es einwandfrei.

Ich versuche mit dem Escape-Zeichen ^ vor <, aber das hat nicht funktioniert.

Eg

Ping 8.8.8.8: Die Protokolldatei ist perfekt, weil es nicht < im Ergebnis ist

Ping 127.0.0.1: Die Skript-Protokolle in Datei

Dank

+0

Sie müssen uns einige typischen Ausgangsleitungen zeigen, die „Arbeit“ oder „nicht funktionieren“, da Sie sind offenbar nicht Englisch (und daher das "Ping" -Ausgabeformat kann etwas anders sein). Ich bearbeite einfach deinen Code im Standardformat - ich habe keine Ahnung was das "^ |^| echo ..." ist - bitte erläutern. Haben Sie '%% a' und' %% b' mit einem 'echo' für die Problemzustände angezeigt? – Magoo

+0

@oasisck Was Sie hier tun, um festzustellen, ob der Ping erfolgreich war oder nicht, ist schrecklich. Lesen Sie [diese Antwort] (https://stackoverflow.com/a/46707214/3074564) mit einem Batch-Code für eine sehr ähnliche Aufgabe wie Sie, indem Sie den Exit-Code "ping" verwenden, um zusätzlich zu protokollieren und zu erklären, wie dieser Code funktioniert. – Mofi

+0

Wofür ist% MS% festgelegt? Da '<' ein Trennzeichen ist, kann es nicht in '%% a' oder' %% b' vorkommen; Daher muss das Problem woanders sein ... – aschipfl

Antwort

0

Dank all

Ich habe mein Problem gefunden, und F *** Windows ...

Das Ergebnis in Ping ist slighlty anders, wenn das Ergebnis <1ms oder höher wie =33 ms

Notieren Sie sich den Raum.

Ich passe nur meinen Code mit

for /f "tokens=1,8 delims=m=^< " %%a in ('ping.exe -w 1000 -n 1 %IP% ^| findstr /i /c:"temps"^|^| echo "Ne Repond Pas"') do (

Und es funktioniert