Nach etwa einem Tag gräbt, fand ich einen Weg, das zu tun:
set error_=0
9>&1 1>&2 2>&9 (for /f "delims=" %%i in ('9^>^&1 1^>^&2 2^>^&9 ^(^(^(2^>^&1 call "%homeDir%%1"^) ^|^| ^(1^>^&2 2^>nul echo FAILED^)^) ^| 2^>nul "%homeDir%mtee" /T /+ "%homeDir%logs\%date_%_%1.log"^)') do (set error_=1))
exit /b %error_%
In dem obigen Beispiel "% homedir %% 1" ausgeführt wird und Seine Ausgabe wird an "% homeDir% mtee" weitergeleitet. Diese Zeile erkennt Fehler (ich würde vorschlagen, dass Sie ein Diagramm der Stapelkontexte und ihrer stdin/stdout/stderr Zuordnungen zeichnen, um zu verstehen, was es tut :-)). Ich habe keinen guten Weg gefunden, den tatsächlichen Fehlerlevel zu extrahieren. Das Beste, was ich bekam, war das ‚echo‘ Befehl mit einigen Batch-Skript Aufruf ‚Call rc.bat‘, die aussehen zu ersetzen:
@echo %errorlevel%
und dann ersetzen ‚gesetzt error_ = 1‘ mit ‚gesetzt Fehler _ =% %ich'.
Aber das Problem ist, dass dieser Anruf auch fehlschlagen kann, und es ist nicht einfach, das zu erkennen. Trotzdem ist es viel besser als nichts - ich habe dafür im Internet keine Lösung gefunden.
bezogen: http://stackoverflow.com/questions/11170753/windows-command-interpreter-how-to-obtain-exit-code-of-first-piped-command – eckes
Mögliche Duplikate von [Windows-Befehlsinterpreter: wie Exit-Code des ersten Piped-Befehls erhalten] (https://stackoverflow.com/questions/11170753/windows-command-interpreter-how-to-obtain-exit-code-of-first-piped-command) –
Was genau ist Das Ziel hier? Ist es einfach, auf den Fehlercode zu reagieren, die Ausgabe zu protokollieren und sie auf der Konsole anzuzeigen? Wenn dem so ist, hat mkl wahrscheinlich die beste Antwort, aber das habe ich erst bemerkt, nachdem ich meinen Eintrag gepostet und alles noch einmal überprüft habe. – jwdonahue