Datei-Umleitung in Windows und %errorlevel%
Können sagen, wir möchten, erstellen Sie eine leere Datei in windows mit dem folgenden Befehl:
type nul > C:\does\not\exist\file.txt
das Verzeichnis nicht vorhanden ist, so erhalten wir die Fehlermeldung:
The system cannot find the path specified
Wenn Sie drucken die %errorlevel%
die Ausgabe ist:
echo %errorlevel%
0
Doch der Befehl wurde nicht erfolgreich!
Mir ist aufgefallen, dass windows nicht die %errorlevel%
den letzten Befehl, wenn Sie verwenden Sie die Umleitung..
Gibt es eine Möglichkeit, um dieses?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die folgenden verwenden:
Ich immer davon ausgegangen, das && und | | - Operatoren verwendet, ERRORLEVEL, aber anscheinend nicht.
Sehr merkwürdig, dass ERRORLEVEL gesetzt wird nach der Umleitung der Fehler nur bei Verwendung der | | - operator. Ich hätte das nie erraten. Noch würde ich jemals die Mühe gemacht, zu testen, wenn nicht für Ihre gute Frage.
Wenn alles, was Sie tun möchten ist, legen Sie die ERRORLEVEL bei der Weiterleitung Versagen, dann natürlich können Sie ganz einfach tun:
&& REM
nicht "fix" ERRORLEVEL für mich auf entweder XP oder Vista.1
nach dem test mit||
. Nach deinem Kommentar habe ich wieder kontrolliert und es war0
. Danke für die Korrektur mich.||
Betreiber, da mag ich die Kompaktheit. Also ich habe nie aufgedeckt dieses sonderbare Verhalten, bis diese Frage kam.type nul > C:\does\not\exist\file.txt || rem
tun soll. Es ändert sich nichtERRORLEVEL
für mich (Win Server 2012 R2) - es bleibt die gleiche, wie durch den letzten Befehl vor der Umleitung.type nul >"bogusPath\test.txt" || rem
gesetzt wird ERRORLEVEL auf 1, wenn Pfad "bogusPath\" existiert nicht.ERRORLEVEL
bleibt unverändert (d.h. es hält immer noch den Wert durch den letzten Befehl vor der Umleitung) wo würde ich erwarten, dass es auf 0 gesetzt werden.echo
eher alstype
z.B.echo nul >"realpath.txt" || rem
und zu sehen, wieecho
hältERRORLEVEL
unberührt ich nicht sehen, die änderung.||
verwendet wird. Ich kann nicht erklären, alle besser als das.echo
nie berührtERRORLEVEL
soecho nul >"realpath.txt" || rem
verlassen würdeERRORLEVEL
allein (weil wederecho
noch die Umleitung Einfluss auf ihn) in der Erwägung, dasstype nul>"realpath.txt" || rem
würden dieERRORLEVEL
auf 0, weiltype
setzt es auf 0 und die Umleitung lässt Sie unberührt. Also, um es zusammenzufassen:cmd > file
haben dieERRORLEVEL
voncmd
wenn die Umleitung erfolgreich war und 1, wenn er nicht (unabhängig von derERRORLEVEL
set voncmd
). Im Fallecmd
nichtERRORLEVEL
eine erfolgreiche Umleitung lassen Sie es unverändert gut.