Utilizzo di file batch, parte 4: L’istruzione CALL
Se non lo avessi indovinato, i file batch possono servire come un tipo rudimentale di linguaggio di programmazione. Una cosa che forniscono i linguaggi di programmazione moderni è la capacità di modulare il codice in piccoli pezzi in modo che se si cambia un pezzo non si rischia di cambiare accidentalmente codice non correlato. È possibile modularizzare un file batch di grandi dimensioni suddividendolo in file più piccoli e utilizzando l’istruzione CALL per richiamare i singoli moduli come richiesto.
Prendiamo il caso di avere un sistema di menu che consente all’utente di richiamare una qualsiasi delle numerose funzioni. Quello che faremo è inserire ciascuna delle funzioni nel proprio file batch e utilizzare l’istruzione CALL nel file batch del menu principale per richiamare la funzione selezionata, che poi tornerà al menu per consentire all’utente di selezionare un’altra funzione.
Ecco come potrebbe apparire Menu.bat:
@ECHO OFF :TOP CLS ECHO Welcome to the Main Menu! Here are your choices... ECHO. ECHO A) Perform Function A B) Perform Function B ECHO C) Perform Function C D) Perform Function D ECHO. ECHO Q) Quit ECHO. CHOICE /C ABCDQ GOTO %ERRORLEVEL% :5 GOTO :EOF :4 CALL FuncD.bat GOTO TOP :3 CALL FuncC.bat GOTO TOP :2 CALL FuncB.bat GOTO TOP :1 CALL FuncA.bat GOTO TOP
Ed ecco come potrebbe apparire FuncA.bat:
ECHO This is Function A PAUSE
Nonostante il fatto che qui non accada nulla di interessante, è l’inizio di un framework decente per un sistema di menu basato su comandi. E ci sono alcuni elementi che dovrebbero essere annotati. Lavorando dall’alto verso il basso, il primo nuovo comando che incontriamo è il comando CLS. Questo semplice comando cancella lo schermo in modo che il nostro menu risulti sempre bello da solo. L’occhio perspicace noterà anche alcune affermazioni ECHO immediatamente seguite da un punto. È così che produci una riga vuota. Un altro nuovo elemento è il built-in: etichetta EOF. Questo elimina la necessità di dover dichiarare la propria etichetta che esiste come ultima riga del file (come la mia etichetta “: Done” usata in altri suggerimenti).
Questo ci porta alle dichiarazioni CALL. Il parametro specificato con CALL è il nome del file batch che deve essere richiamato successivamente. Quindi, ad esempio, se l’utente ha scelto l’opzione A dal menu, il file batch andrebbe immediatamente all’etichetta: 1 che causerebbe il successivo richiamo di FuncA.bat. Il mio file FuncA.bat fa semplicemente ECHO una riga e fa una PAUSA. L’istruzione PAUSE provoca l’output di una riga che dice “Premere un tasto qualsiasi per continuare …”. Quindi sospende l’esecuzione del file batch fino a quando l’utente non preme un tasto. Una volta premuto un tasto, il file batch procede, il che in questo caso significa che FuncA.bat termina e il controllo riprende nel file batch del menu principale alla riga immediatamente successiva alla chiamata a FuncA.bat. Quindi la prossima cosa che accadrà sarà GOTO TOP, che ricomincia tutto da capo.
Notare che non è necessario inserire un altro “@ECHO OFF” all’inizio di FuncA.bat perché lo stato ECHO viene mantenuto quando viene chiamato FuncA.bat.
Questo suggerimento (13187) si applica a Windows 7, 8 e 10.