2010-06-21 10 views
6

Der folgende Code zeigt immer 0 als Errorlevel an, aber wenn der Kopierbefehl außerhalb des Befehls for loop ausgeführt wird, wird ein Fehlerlevel ungleich Null zurückgegeben.Errorlevel des vom Batch ausgeführten Befehls für die Schleife

for /f "usebackq delims=" %%x in (`copy x y`) do (
    set VAR=%%x 
) 
ECHO Errorlevel = %ERRORLEVEL% 
ECHO VAR = %VAR% 

Ist es möglich, den Fehlerlevel des Kopierbefehls zu erhalten, der von der for-Schleife ausgeführt wird?

Antwort

1

Ich nehme an, dass Sie Dateien von einem Verzeichnis zu einem anderen kopieren? Wenn ja, könnten Sie so etwas wie dies stattdessen tun:

@echo off 

setlocal EnableDelayedExpansion 

set ERR=0 

for %%x in (x) do (

    copy %%x y 
    set ERR=!errorlevel! 

    set VAR=%%x 
) 
ECHO Errorlevel = %ERR% 
ECHO VAR = %VAR% 

Die verzögerte Expansion benötigt wird, um den tatsächlichen Wert von Errorlevel innerhalb der Schleife zu erhalten anstelle des Wertes, bevor die Schleife eingegeben wird.

Wenn dies nicht das ist, was Sie versuchen, erläutern Sie bitte Ihr Ziel.

+0

ich versuche, die Ausgabe für eine ausführbare Datei zu analysieren (die Kopie ist nur ein einfaches Beispiel), aber ich möchte wissen, ob die ausführbare Datei hat einen Fehler zurückgegeben. – Josh

+0

Ok. Ich bin mir nicht sicher, ob Sie den errorlevel für den von der for-Schleife ausgeführten Befehl erhalten können, ohne sie zu trennen, wie in meinem Beispiel, vielleicht kann jemand anderes eine bessere Antwort liefern. – WildCrustacean

4

es funktioniert für mich! Sie müssen die Fehlerprüfung nur innerhalb der DO-Klammern mit einer Textdatei einfügen, die die Kopierbefehle enthält (7200 Zeilen; Beispiel: Kopie 2_97691_Scan.pdf O: \ Data \ Dev \ Mins \ PDFScan2 \ 2011 \ 4 \ 2_97691_Scan. pdf), ich kann die folgende Batchdatei ausführen

@echo off 

setlocal EnableDelayedExpansion 

for /F "delims=" %%I in (CopyCurrentPDFs.txt) do (
%%I 
if !errorlevel! NEQ 0 echo %%I>>errorcopy.txt 
) 
+1

Das wichtige Bit hier ist 'EnableDelayedExpansion' –

+0

Danke - es hat für mich funktioniert! –

+1

Warnung: Dies ist eine Lösung für eine 'FOR/F' * Datei * Schleife, nicht eine 'FOR/F' * Befehl * Schleife wie bei der ursprünglichen Frage. Bitte beachten Sie: ["ERRORLEVEL in FOR/F Befehlsschleife liefert unerwartetes Ergebnis"] (http://stackoverflow.com/questions/38515054/errorlevel-in-for-f-command-loop-with-enabledelayedexpansion-returns-unexpected) –

Verwandte Themen