Utilizzo di file batch, parte 3: il comando IF
Questo suggerimento continua la serie sull’utilizzo dei file batch. Si suggerisce di (ri) visitare i suggerimenti precedenti in modo che possiamo riprendere da dove avevamo interrotto. Finora abbiamo coperto i seguenti comandi: DIR, REM, ECHO, FIND, TIME e TIMEOUT. Abbiamo anche usato i seguenti operatori: output to file (>), remark (: :), no echo (@), pipe (|) e concatenate (&).
Infine, sappiamo che utilizziamo i parametri passati a un file batch tramite le combinazioni% 1,% 2,% 3, ecc.
Questo suggerimento si concentrerà sui comandi correlati all’esecuzione dell’elaborazione condizionale in un file batch. Questi includono IF, CHOICE, GOTO e la sintassi speciale di “: label”.
Ho un file batch molto utile chiamato Do.bat. È poco più di un “wrapper” che esegue programmi indipendentemente da dove risiedono questi programmi.
Quindi, ad esempio, se voglio eseguire il programma chiamato Prog1.exe, digito semplicemente
C:\Bat> DO Prog1
Se volessi eseguire Prog2.exe, dovrei digitare
C:\Bat> DO Prog2
La bellezza di Do.bat è che quando l’ho creato, ho inserito le posizioni di tutti i programmi con cui voglio che funzioni. Quindi non devo ricordare, ad esempio, che Prog1.exe risiede in “C: \ Programmi \ I miei programmi \ Prog1.exe” e che Prog2.exe risiede in “D: \ Utilities \ Barry \ Prog2.exe” . Inoltre, non devo mai più digitare quei nomi di percorso lungo.
Il mio file Do.bat ha questo aspetto:
@ECHO OFF GOTO %1 :Prog1 "C:\Programs\My Programs\Prog1.exe" GOTO Done :Prog2 "D:\Utilities\Barry\Prog2.exe" GOTO Done :Done
La prima riga del file garantisce che le altre righe non verranno visualizzate. Segue la riga GOTO, che prende come parametro il nome dell’etichetta a cui trasferire il controllo. E così accade che questa etichetta sia anche il parametro che è stato passato a Do.bat per cominciare. Pertanto, quando si richiama Do.bat e si passa “Prog1” come parametro, il file .bat esegue un GOTO a un’etichetta denominata “: Prog1” (non distingue tra maiuscole e minuscole). L’esecuzione segue sequenzialmente dall’alto verso il basso, quindi il prossimo comando da eseguire è quello che richiama Prog1.exe. Al termine del programma, il file .bat continua eseguendo il comando “GOTO Done”. L’etichetta “: Done” è l’ultima riga del file, quindi quando raggiunge questo punto, il file .bat viene chiuso. (C’è un comando EXIT, ma se dovessimo eseguirlo, terminerebbe non solo il file .bat ma anche l’intera sessione CMD, che probabilmente non è quello che vuoi fare.)
In alternativa si potrebbe utilizzare il comando SCELTA e magari creare un semplice menu dal quale scegliere quale programma eseguire. In questo caso potrei creare un file chiamato Choice.bat che sarebbe simile a questo:
@ECHO OFF ECHO Select 1 to run Prog1 ECHO Select 2 to run Prog2 ECHO Select Q to quit CHOICE /C 12Q /T 10 /D Q GOTO %ERRORLEVEL% :3 ECHO Quitting GOTO Done :2 "D:\Utilities\Barry\Prog2.exe" GOTO Done :1 "C:\Programs\My Programs\Prog1.exe" GOTO Done :Done
Il comando SCELTA fornisce all’utente la richiesta di immettere 1, 2 o Q (per impostazione predefinita, non fa distinzione tra maiuscole e minuscole). Qualsiasi altro personaggio viene ignorato. L’opzione / T indica il timeout in 10 secondi, momento in cui la procedura si comporterà come se fosse selezionata l’opzione Q (/ D Q indica che l’opzione predefinita è Q). Dopo l’esecuzione del comando CHOICE, la variabile% ERRORLEVEL% viene impostata sul valore ordinale dell’opzione selezionata. Quindi, se l’utente ha selezionato 1,% ERRORLEVEL% è impostato su 1; se l’utente ha selezionato 2,% ERRORLEVEL% è impostato a 2; e se l’utente ha selezionato Q,% ERRORLEVEL% è impostato su 3. Quindi ANDIAMO all’etichetta indicata da% ERRORLEVEL% ed eseguiamo l’azione richiesta.
Potrei scrivere un intero suggerimento sul comando IF, ma le basi sono che fai qualcosa del tipo:
IF arg1 operator arg2 command
dove “arg1” e “arg2” sono argomenti in fase di test, “operatore” è uno tra EQU, NEQ, LSS, LEQ, GTR, GEQ (ad esempio, EQUal, Not Equal, LeSS than, ecc.) e “command” è un comando della riga di comando.
Un semplice file batch per fare l’eco di P1 se ce n’è uno potrebbe assomigliare a questo:
@ECHO OFF IF [%1] EQU [] ECHO No Parameter passed IF [%1] NEQ [] ECHO Parameter P1 is '%1' GOTO:eof
(Ho preso l’abitudine di usare [] nei miei argomenti per evitare certe complicazioni.)
Ci sono anche altri gusti di IF. Ad esempio, puoi testare un livello di errore, verificare se esiste un file, includere un’istruzione ELSE, ecc.
Nella riga di comando, fai un IF /? e avrai una buona idea di quello che puoi fare.
Questo suggerimento (13185) si applica a Windows 7, 8 e 10.