ist es möglich, die Fehlerebene auch wenn ich Rohr der Ausgabe eines Skripts in eine Log-Datei zurück:Windows-Batch-Datei: Rohr zerstört mein Rückgabecode
test1.bat:
call test2.bat 2>&1 | tee log.txt
echo ERRORLEVEL: %ERRORLEVEL%
test2.bat:
exit /B 1
Ausgang beim Aufruf test1.bat:
ERRORLEVEL: 0
Der Errorlevel ist immer 0.
Das Problem ist, möchte ich ein anderes Skript in meinem Skript aufrufen, wo die Ausgabe mit der Ausgabe in der Befehlszeile angezeigt, also eine einfache synchron umgeleitet werden soll > ist nicht genug für mich. Ich habe versucht, einige Ideen, aber Ergebnis ist, dass das Rohr immer den gegebenen Fehler-Level zu zerstören scheint ... :(
Können Sie mir weitere Vorschläge geben?
Vielen Dank im Voraus ... :)
Vielen Dank für Ihre Antwort ... Leider ist dies auch nicht ... :(sehen Sie, was ich versucht:
test1.bat:
echo off
set VAR1=" "
echo VAR1 before test2: %VAR1%
call test2.bat 2>&1 | tee log.txt
echo VAR1 after test2: %VAR1%
test2:
@echo off
set VAR1=ERROR
echo VAR1 in test2: %VAR1%
exit /B 1
Ausgabe, wenn test1.bat Aufruf:
VAR1 before test2: " "
VAR1 in test2: ERROR
VAR1 after test2: " "
Als andere Lösung, die ich versuchte, "ERRORVALUE: 1" speichern in das Logfile, falls es einen Fehler gibt. Im Hauptbuch wollte ich das Protokoll analysieren, um nach dieser Zeichenfolge zu suchen. Leider ist der Fund-Ergebnis in eine Umgebungsvariable Einsparung auch nicht funktioniert, habe ich wie folgt:
FOR /F "tokens=1 delims=" %%A in ('type %logDir%\03_applySqls.log | find /c "ERRORVALUE: 1"') do SET val=%%A
Fehler erhalte ich:
"|" ist syntaktisch an dieser Stelle nicht verarbeitbar.
So wie kann ich zumindest meine Logfile analysieren und in Wenn die Zeichenfolge im Protokoll gefunden wird, kann ich den Wert als Errorlevel zurückgeben?
sehr ähnlich: http://stackoverflow.com/questions/11170753/windows-command-interpreter-how-to-obtain-exit-code-of-first -Piped-Befehl – eckes