:EOF
è un'etichetta predefinita come spiega Microsoft nella documentazione per il comando GOTO. L'output della guida eseguito in una finestra del prompt dei comandi goto /?
spiega anche questa etichetta speciale per Fine del file. Ma questa etichetta predefinita è supportata solo con le estensioni dei comandi abilitate come predefinite.
L'uscita aiuto in esecuzione in una finestra di prompt dei comandi call /?
e, naturalmente, anche la documentazione per il comando CALL spiegare sia che goto :EOF
dovrebbe essere usato per uscire da una subroutine chiamato con call :Label
.
Una subroutine non è altro che un altro file batch incorporato nel file batch corrente chiamato con il comando call
. Se la subroutine si trova alla fine del file batch, la fine reale del file segna la fine della subroutine.
Ma ci possono essere più subroutine in un file batch.
Quindi un comando è necessario per l'interprete dei comandi per uscire dalla subroutine al raggiungimento di una riga specifica nell'elaborazione dei comandi e tornare al processo del comando chiamante. goto :EOF
e exit /B
possono essere utilizzati ovunque per uscire da una subroutine o uscire dall'elaborazione batch corrente.
Nel codice del lotto in questione, la prima goto :EOF
è necessario per uscita file batch trasformazione senza una caduta indesiderata attraverso il codice subroutine dopo aver terminato il ciclo.
Il secondagoto :EOF
discontinuo codice di interrogante è per uscire la subroutine e proseguire l'elaborazione in PER loop nella seconda riga. Non esce dall'elaborazione del file batch, esce solo dalla subroutine.
Nota 1:goto EOF
senza i due punti è necessario che ci sia davvero una riga che inizia con :EOF
nel file batch, vale a dire l'etichetta di salto EOF
deve esistere nel file. goto :EOF
risulta sempre in uscita dall'elaborazione di subroutine/batch con estensioni di comando abilitate anche se esiste un'etichetta EOF
nel file batch a causa di una riga che inizia con :EOF
.
Nota 2: Comando EXIT senza parametro /B
risultati sempre uscire tutta l'elaborazione del comando indipendente a chiamare gerarchia e indipendente come il comando interpeter è stato avviato con il parametro /K
(tenere aperto ed usati quando si apre una finestra del prompt dei comandi) o con /C
(chiudi dopo l'elaborazione del comando terminato come utilizzato facendo doppio clic su un file batch). Pertanto, exit
senza /B
deve essere utilizzato saggiamente in un file batch (il migliore: mai).
Nota 3:exit /B
non funziona con le estensioni comando disattivato come dimostrato da questo codice:
@echo off
setlocal DisableExtensions
echo Use command exit /B with command extensions disabled.
exit /B
L'esecuzione di questo file batch all'interno di un prompt dei comandi risultati delle finestre in uscita del messaggio di errore:
il sistema non riesce a trovare l'etichetta batch specificato - EOF
In altre parole, exit /B
è esattamente come goto :EOF
e dipende quindi anche dalle estensioni dei comandi. exit
senza /B
funziona sempre.
Nota 4:ERRORLEVEL
non è influenzato dal goto :EOF
, ma la documentazione di Microsoft GOTO è muta su questo argomento. exit /B #
imposta ERRORLEVEL
a #
as documented di Microsoft. Tuttavia, non è in genere necessario uscire esplicitamente da un file batch con un codice di uscita specifico poiché né goto :EOF
né exit /B
modificano il valore corrente di ERRORLEVEL
.
Per i dettagli sul comportamento ERRORLEVEL
vedere:
Ho capito grazie mille! – s6398197atuser
Il testo della guida che appare quando si digita 'cmd /?' Elenca tutti i comandi che sono effettuati dalle estensioni dei comandi, ma 'exit' è * non * menzionato; grazie per averlo indicato! – aschipfl