|
|
|
|
Strumenti |
07-12-2014, 17:15 | #1 |
Member
Iscritto dal: Jul 2012
Messaggi: 126
|
[DOS] Si può fare questa cosa in DOS?
Ciao, e scusate il titolo generico
Con un file batch è possibile eseguire contemporaneamente due processi, mantenendo il codice sullo stesso script? Cerco di spiegarmi... Un primo file batch contiene un loop che viene eseguito senza interruzione fino al termine del processo. Al verificarsi di una determinata condizione, viene avviato un secondo file batch, mentre il primo è ancora in esecuzione. E' possibile accorpare il codice del primo e del secondo script in un unico file batch? Una possibilità sarebbe Codice:
START CMD /k "<codice del secondo batch>" ma i comandi multipli dopo /k devono essere racchiusi tra virgolette, limitando la possibilità di inserire comandi complessi. Grazie. |
10-12-2014, 11:04 | #2 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Ti suggerisco una strada alternativa molto più semplice: basta che scrivi i due programmi all'interno di due routine distinte nello stesso file, quindi prevedi un parametro che dica allo script se deve eseguire la prima routine o la seconda.
La prima routine richiama lo stesso file batch passando il parametro che indica di eseguire la seconda routine. |
11-12-2014, 19:34 | #3 | |
Member
Iscritto dal: Jul 2012
Messaggi: 126
|
Quote:
E come faccio (con quale comando o sequenza di comandi) ad indicare quale routine eseguire? So usare CALL per richiamare altri file eseguibili o per richiamare etichette dello stesso file bat (ma interrompendo la routine corrente): questa cosa che dici tu non l'ho mai fatta |
|
12-12-2014, 07:18 | #4 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Dalla tua risposta vedo che conosci già tutti gli elementi necessari, ti faccio un esempio molto banale su come utilizzarli, supponiamo che il file si chiami script.cmd:
Codice:
@echo off set prog_da_eseguire=%1 if "%prog_da_eseguire%"=="secondo_prog" ( call :secondo_prog ) else ( call :primo_prog ) exit 0 :primo_prog start script.cmd secondo_prog for /l %%i in (1, 1, 10) do ( echo Primo prog %%i ping -n 2 127.0.0.1 >nul ) goto:eof :secondo_prog for /l %%i in (1, 1, 10) do ( echo Secondo prog %%i ping -n 2 127.0.0.1 >nul ) goto:eof |
13-12-2014, 06:36 | #5 |
Member
Iscritto dal: Jul 2012
Messaggi: 126
|
Bingo!
GRANDE Daniels118 Basta inserire all'inizio del file un comando CALL Codice:
CALL :%1 Codice:
START File.bat <nome etichetta> Grazie mille. P.S.: sono molto inesperto (tra l'altro) nell'uso dei parametri. Qualcuno sa dove trovare dei buoni esempi? Grazie ancora. |
13-12-2014, 09:24 | #6 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Si, però in quel modo sei costretto a passare il nome dell'etichetta anche quando sei tu a lanciare lo script. Si può ovviare dando un valore predefinito alla variabile:
Codice:
set etichetta=%1 if not defined etichetta set etichetta=etichetta_predefinita Nel comando start puoi sostituire il nome dello script con %~f0, in questo modo puoi rinominare il file senza modificare le istruzioni start. Qui puoi trovare molte informazioni su questo ed altri argomenti: http://ss64.com/nt/syntax-args.html |
13-12-2014, 18:46 | #7 |
Member
Iscritto dal: Jul 2012
Messaggi: 126
|
Ma...sopprimere semplicemente il messaggio di errore con
Codice:
@CALL :%1 2>NUL Poco elegante? |
13-12-2014, 19:31 | #8 |
Member
Iscritto dal: Jul 2012
Messaggi: 126
|
Oppure utilizzare, per lanciare il file bat, un link con destinazione
Codice:
Unità:\Percorso\NomeFile.bat etichetta_inizio Codice:
CALL :%1 :etichetta_inizio |
14-12-2014, 09:19 | #9 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
De gustibus
|
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:48.