Frage

Ich habe eine Batch-Datei bekam, die aus einer Textdatei eine Reihe von Dateinamen analysiert und verknüpft sie zu einem einzigen stark - es wurde vorher diskutiert hier . Aber ich will nicht die Zeichenfolge, die eine Datei enthalten, wenn die Datei einen Fehler aus, wenn ich es durch einigen Befehl ausführen (wie ein VCS-Check, zum Beispiel). Hier ist mein Versuch:

set FILE_LIST=
for /f %%x in (temp.txt) do (

:: perform a VCS test
accurev diff -b %%x

:: skip concatenation if error level is > 2
IF errorlevel 2 GOTO NEXT

:: perform the concatenation
set FILE_LIST=!FILE_LIST! %%x

:NEXT
:: print a message if here due to an error above
IF errorlevel 2 echo VCS problem with this file: %%x
)

Das Problem ist - das Skript die gesamte Ausführung for-Schleife zu beenden erscheint, sobald es ein Errorlevel größer als 2 findet Wenn es fünf Dateien in der Liste enthalten sind und der dritte ein VCS Problem hat - das Skript nur Griffe die ersten beiden.

War es hilfreich?

Lösung

setlocal ENABLEDELAYEDEXPANSION
set FILE_LIST=
for /f %%x in (temp.txt) do (
    accurev diff -b "%%~x"
    IF errorlevel 2 (
        echo VCS problem with this file: %%~x
    ) ELSE (
        set FILE_LIST=!FILE_LIST! %%x
    )
)

Andere Tipps

  

IF Error-Konstruktion hat eine   seltsame Eigenschaft ... es gibt TRUE zurück, wenn die   Rückgabecode war gleich oder höher   als die angegebenen Fehlerebene.

Link zu verstehen, wie mit dem "Feature" befassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top