2011-01-28 15 views

risposta

15

È 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 
+0

Aha - quindi la distinzione tra eseguibili esterni e script cmd esterni è la chiave.Grazie per l'illuminazione. – Martin

3

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.

20

Si dovrebbe usare call quando si sia desidera:

  • chiamata un altro file di comando e tornare a questo uno quando è fatto.; oppure
  • chiama una funzione nel file di comando corrente.

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.

+2

+1 - La funzione di subroutine sembra molto utile. – Martin

+0

@paxdiablo, cosa intendi per "* catena * per il file' number2.cmd' "? – Pacerier

+0

@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

Problemi correlati