2017-09-18 5 views
0

Ich vergleiche eine Liste von Dateien aus 2 Ordnern mit einer Windows-Batch-Datei. Es gibt die Ergebnisse aus, ob PASS/FAIL.Wie erhalten Sie ERRORLEVEL für jeden Befehl in FOR LOOP?

Aktuelle Arbeits Batch File:

for /F "tokens=*" %%f in (list.txt) do compare Folder1\%%f.png Folder2\%%f.png 

Wenn es 3 Dateien, würde so aussehen der Ausgang nach Ausführung dieses Befehls:

PASS 
FAIL 
PASS 

Wenn ich die% Error-% hier echo , würde 0 zurückgeben, weil die for-Schleife gut lief.

echo %ERRORLEVEL% 

0 

meine Anforderung

Echo das Ergebnis jedes Befehls in der FOR-Schleife statt.

Mein Erwarteter Ausgang

0 
1 
0 

Wie ändere ich die Batch-Datei, dies zu erreichen?

Antwort

1

Unter der Annahme, dass FAIL die ERRORLEVEL ändert, & Verwenden ERRORLEVEL für jeden Befehl echo:

SETLOCAL EnableDelayedExpansion 
for /F "tokens=*" %%f in (list.txt) do compare Folder1\%%f.png Folder2\%%f.png & echo !ERRORLEVEL! 
ENDLOCAL 

OUTPUT:

PASS 
0 
FAIL 
1 
PASS 
0 

Ich gehe davon aus PASS/FAIL die Ausgabe Ihres compare Dienstprogramm . So blenden diese Ausgabe Verwendung Umleitung > zu NUL wie folgt aus:

SETLOCAL EnableDelayedExpansion 
for /F "tokens=*" %%f in (list.txt) do compare Folder1\%%f.png Folder2\%%f.png > NUL & echo !ERRORLEVEL! 
ENDLOCAL 

OUTPUT:

0 
1 
0 

Von documentation:

&: command1 & command2

Zum Trennen mehrerer Befehle in einer Befehlszeile. Cmd.exe führt den ersten Befehl und dann den zweiten Befehl aus.

+1

Dies kann nicht funktionieren, weil: 1. Sie [verzögerte Erweiterung] (http://ss64.com/nt/delayedexpansion.html) für '! ErrorLevel!' Benötigen, um den ErrorLevel der Iteration zu erhalten; Andernfalls wird der beim Lesen der gesamten Befehlszeile vorhandene ErrorLevel zurückgegeben. 2. ['&&'] (http://ss64.com/nt/syntax-conditional.html) verhindert, dass Fehlerlevel ungleich Null zurückgegeben werden, Sie müssen '&' stattdessen verwenden; – aschipfl

+0

@aschipfl, Entschuldigung für den Blick. Ich habe die Antwort aktualisiert und Dokumentation hinzugefügt. Danke für das Aufzeigen. – sohaib

+0

Ich habe das versucht. Die folgende Ausgabe erhalten: PASS ! ERRORLEVEL! FEHLER ! ERRORLEVEL! PASS ! ERRORLEVEL! – InsecureNoob

Verwandte Themen