2016-05-03 6 views
3

Ich weiß, diese Frage wurde oft gestellt, aber ich habe die Antworten stundenlang gelesen und alles versucht, nichts scheint zu funktionieren. Grundsätzlich kann es mir nicht gelingen, eine Variable in einer For/F-Schleife (neu) zu setzen.Wie setze ich eine Variable in einer FOR-Schleife, die an einer Pipe beteiligt ist?

Ich möchte Folgendes tun: Überprüfen Sie die Verbindung zwischen zwei Computern und eine Aktion (im Grunde ein Programm starten), wenn die Verbindung nicht mehr existiert.

Hier nehme ich an, dass, wenn der PING-Befehl nicht mindestens einmal das Wort "Reply" zurückgibt, dann die Verbindung verloren ging.

Das erste "DO @ECHO %% a" funktioniert, aber dann wird die Variable "_A" nicht zurückgesetzt. Und ich brauche diese Variable außerhalb der FOR-Schleife, denn danach muss das "if% _A% == 1" das Programm nur einmal ausführen.

Wer weiß, was ich falsch mache? Vielen dank für Deine Hilfe. Ich habe wirklich alles versucht, einschließlich setlocal enabledelayedexpansion und setzen Variable zwischen !!, aber nichts funktioniert, es endet immer drucken "FAIL" und nie "Erfolg".

Antwort

2

Das ist eine gute Frage! Das Problem ist die Leitung |, da dies separate temporäre cmd Instanzen für beide Seiten initialisiert. Die Variable _A wird in der richtigen Instanz gesetzt, ist aber danach verloren.

Wenn Sie das tun.

for /F "tokens=*" %%a in ('PING localhost ^| FINDSTR Reply') do @ECHO %%a & SET _A=1 

es wird funktionieren wie die set Befehl im Haupt cmd Instanz ist die Batch-Skript in läuft

Notiere die Rohr entkam ^|, die notwendig ist, Um seine Ausführung an die cmd Instanz zu übertragen, die von for /F für die Befehlszeile erstellt wird, analysiert es.

+0

Das macht wirklich Sinn. Vielen Dank für die Antwort und die Erklärung! Alles Gute. – ccflash

Verwandte Themen