Sembra che uno script cmd contenente:cmd.exe: quando usare chiamata per eseguire programmi esterni
prog1
prog2
fa lo stesso
call prog1
call prog2
Qual è il punto di utilizzare il comando CALL ?
Sembra che uno script cmd contenente:cmd.exe: quando usare chiamata per eseguire programmi esterni
prog1
prog2
fa lo stesso
call prog1
call prog2
Qual è il punto di utilizzare il comando CALL ?
È necessario utilizzare call
quando è necessario chiamare un altro programma batch (script cmd). L'uso di "chiamata" non ha alcun effetto se prog1
è un file eseguibile. (prog1.exe
)
Se, ad esempio, dispone di due script:
cmd1.cmd
cmd2.cmd
E nel giro di cmd1.cmd
si dispone di una linea:
cmd2.cmd
... allora lo script si fermerà non appena cmd2.cmd
è terminato l'esecuzione. Invece si dovrebbe usare:
call cmd2.cmd
Aha - quindi la distinzione tra eseguibili esterni e script cmd esterni è la chiave.Grazie per l'illuminazione. – Martin
Normalmente la chiamata viene utilizzata per eseguire un altro file batch all'interno di un file batch. Quando il file batch chiamato viene completato, il resto del file batch originale viene completato.
Nota se il file batch non esiste, verrà visualizzato un messaggio di errore.
sintassi è: CALL [drive:][path]filename [batch-parameters]
Non ci sono restrizioni in cui chiamarlo. È possibile utilizzare il comando CALL in qualsiasi file batch per chiamare un altro file batch.
Spero che questo aiuti.
Si dovrebbe usare call
quando si sia desidera:
Un file di comando con la linea:
number2.cmd
volontà catena al file number2.cmd
, il che significa che verrà eseguito lo script, ma non tornare a continuare l'esecuzione su quello corrente.
Per quanto riguarda il secondo punto, si possono fare cose come:
call :subroutine
call :subroutine
goto :eof
:subroutine
echo in here
goto :eof
e otterrete in here
stampato due volte. Questa capacità di chiamare le funzioni all'interno degli script di comando è in realtà abbastanza utile.
+1 - La funzione di subroutine sembra molto utile. – Martin
@paxdiablo, cosa intendi per "* catena * per il file' number2.cmd' "? – Pacerier
@Pacerier, volevo dire che non tornerà allo script corrente una volta terminato, una frase che ho conservato sin dai miei giorni di programmazione BASIC troppi decenni fa :-) Vedi https://en.m.wikipedia.org/wiki/Chain_loading per i dettagli. Spero di averlo reso più chiaro con la modifica. – paxdiablo
Appartiene al superutente. – leppie
Vedere http://stackoverflow.com/q/1103994/632951 ha risposte migliori. – Pacerier