View Full Version : [DOS] Si può fare questa cosa in DOS?
23Andrea
07-12-2014, 18:15
Ciao, e scusate il titolo generico :stordita:
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
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.
:mc:
Grazie.
Daniels118
10-12-2014, 12:04
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.
23Andrea
11-12-2014, 20:34
...scrivi i due programmi all'interno di due routine distinte nello stesso file,...
Come si distinguono due routine nello stesso file? Con due etichette?
E come faccio (con quale comando o sequenza di comandi) ad indicare quale routine eseguire?:help:
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 :cry:
Daniels118
12-12-2014, 08:18
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:
@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
Basterà chiamare script.cmd e come per magia si apriranno due finestre, una stamperà "Primo prog ..." e l'altra "Secondo prog ...", i cicli for e i comandi ping servono per far rimanere aperte le finestre per il tempo sufficiente a valutare la funzionalità, ovviamente tu li sostituirai con le istruzioni che ti interessano.
23Andrea
13-12-2014, 07:36
Bingo! :yeah:
GRANDE Daniels118 :ave:
Basta inserire all'inizio del file un comando CALL
CALL :%1
e poi utilizzare
START File.bat <nome etichetta>
per richiamare il file.
Grazie mille.
P.S.: sono molto inesperto (tra l'altro) nell'uso dei parametri. Qualcuno sa dove trovare dei buoni esempi? Grazie ancora.
Daniels118
13-12-2014, 10:24
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:
set etichetta=%1
if not defined etichetta set etichetta=etichetta_predefinita
Ovviamente questo non ti salva se passi il nome di un'etichetta non definita.
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
23Andrea
13-12-2014, 19:46
Ma...sopprimere semplicemente il messaggio di errore con
@CALL :%1 2>NUL
:Perfido:
Poco elegante?
23Andrea
13-12-2014, 20:31
Oppure utilizzare, per lanciare il file bat, un link con destinazione
Unità:\Percorso\NomeFile.bat etichetta_inizio
e inserire una etichetta subito dopo la chiamata del parametro:
CALL :%1
:etichetta_inizio
Daniels118
14-12-2014, 10:19
De gustibus :)
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.