jest to możliwe, do zwrotu errorlevel także jeśli rura wyjście skryptu do pliku dziennika:plik wsadowy Windows: Rura niszczy mój kod zwrotny
test1.bat:
call test2.bat 2>&1 | tee log.txt
echo ERRORLEVEL: %ERRORLEVEL%
test2.bat:
exit /B 1
Wyjście dzwoniąc test1.bat:
ERRORLEVEL: 0
errorlevel jest zawsze 0.
Problem polega na tym, chcę zadzwonić inny skrypt wewnątrz mojego skryptu gdzie wyjście powinno być przekierowany synchronicznie z wyjściem przedstawionym w wierszu polecenia, zatem prosty > nie wystarcza dla mnie. Próbowałem kilka pomysłów, ale wynik jest taki, że rura zawsze wydaje się zniszczyć daną błędzie poziomie ... :(
Czy możesz dać mi jakieś dalsze sugestie?
Z góry dzięki ... :)
Dzięki za odpowiedź ... Niestety to nie działa tak dobrze ... :(Zobacz co starałem:
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
Wyjście Dzwoniąc test1.bat:
VAR1 before test2: " "
VAR1 in test2: ERROR
VAR1 after test2: " "
Jako inne rozwiązanie starałem się oszczędzać "ERRORVALUE: 1" w pliku dziennika w przypadku wystąpienia błędu. W tekście głównym chciałbym przetworzyć dziennik szukający tego ciągu. Niestety zapisywania Find-wynik do zmiennej środowiskowej nie działa tak dobrze, ja w następujący sposób:
FOR /F "tokens=1 delims=" %%A in ('type %logDir%\03_applySqls.log | find /c "ERRORVALUE: 1"') do SET val=%%A
Błąd pojawia się:
"|" ist syntaktisch an dieser Stelle nicht verarbeitbar.
Więc jak mogę przynajmniej przeanalizować moje logfile aw przypadku znalezienia łańcucha znaków w dzienniku mogę zwrócić wartość jako poziom błędu?
bardzo pokrewne: http://stackoverflow.com/questions/11170753/windows-command-interpreter-how-to-obtain-exit-code-of-first -piped-command – eckes