Domanda

Se faccio uno script batch chiamato temp.bat (per esempio) che contiene:

exit /b 1

Quando eseguo in vari modi, ottengo un comportamento diverso sul mio sistema XP a 32 bit rispetto a un sistema a 64-bit di XP.

32 bit:

> temp.bat
> echo %ERRORLEVEL%
1
> cmd /c temp.bat
> echo %ERRORLEVEL%
0

a 64 bit:

> temp.bat
> echo %ERRORLEVEL%
1
> cmd /c temp.bat
> echo %ERRORLEVEL%
1

Ho cercato attraverso le opzioni di cmd.exe e sono stato in grado di trovare tutte le opzioni che controllano come si propaga le informazioni errorlevel da script batch. A questo punto non riesco a trovare alcuna spiegazione razionale di questa differenza.

È stato utile?

Soluzione

Bisogna stare attenti con uscita / b dal momento che in realtà non funziona correttamente in tutti i casi. Ad esempio:

temp.bat&&echo 0||echo 1

Se temp.bat contiene uscita / b 1 ci si aspetterebbe 1 da stampare, ma non lo è. Purtroppo, l'unico modo per impostare davvero un codice di uscita che lavora per un file batch è quello di utilizzare @%COMSPEC% /C exit 1 come ultima riga nel file batch

Altri suggerimenti

Il problema con l'esempio di Anders è che usa un file .bat. Se si utilizza un file .cmd, uscita funziona come documentato.

Il punto principale di avere sia i file .cmd .bat e sembra che ci sia la compatibilità all'indietro: se è l'esecuzione di un file .bat, cmd cerca di emulare il pre-NT CLI, command.com, che ha avuto molto più semplice la gestione degli errori.

Almeno questa è la mia supposizione. Mi sono imbattuto in questa discussione, mentre googling per documentazione ufficiale sul .bat / .cmd cosa, che io non riesco a trovare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top