File batch di esempio in esecuzione |
Domanda
Come funzionano i parametri nei file batch?
Risposta
Talvolta capita di dover scrivere un file batch (.bat) che deve
ricevere dei parametri: in questo semplice tutorial vedremo come gestirli e
manipolarli con la sintassi propria dei batch di Windows. Vediamo un
primo file batch di esempio (stampa1-3.bat):
@echo
off echo Il primo parametro: %1 echo Il terzo parametro: %3
Se
lo eseguiamo con dal prompt dei comandi come segue:
stampa1-3.bat
PrimoParametro Secondo "Terzo Parametro"
Otterremo come output:
Il primo parametro: PrimoParametro Il terzo parametro: "Terzo
parametro"
Infatti i parametri (che vanno specificati sulla linea di
comando separati da spazi o se contengono spazi racchiusi tra virgolette)
possono essere richiamati con il simbolo di percentuale seguito dall'indice
del parametro. Si badi però che sono disponibili solamente i comandi da 1 a
9, inizialmente, ovvero "%10" non è valido, in quanto verrà interpretato
come "%1" seguito da "0". Se si necessita di accedere al decimo parametro (o
ai successivi) bisogna servirsi del comando shift che si
occupa di spostare gli indici dei parametri in avanti di uno. Quindi
inizialmente saranno disponibili i parametri da 1 a 9, dopo la prima
chiamata quelli da 2 a 10, dopo la seconda da 3 a 11 e così via (stampa-12.bat):
@echo off shift shift shift echo Dodicesimo parametro: %9
Da chiamare come segue:
stampa-12.bat 1 2 3 4 5 6 7 8 9 10 11 12
13 14
Vediamo infine alcune possibilità alternative per specificare i
parametri (si consideri che al posto del numero 1 può andare qualsiasi
indice di parametro valido):
- %~1: parametro senza virgolette (ad esempio nel
primo esempio, "Terzo Parametro");
- %~f1: restituisce il percorso completo comprensivo
di directory del file passato come parametro;
- %~d1: restituisce la lettera dell'unità della
cartella/file passato come parametro;
- %~p1: restituisce il percorso, esclusa l'unità, in
cui si trova il file o cartella passato come parametro;
- %~n1: restituisce il nome della cartella o del file
(senza estensione) passato come parametro;
- %~x1: restituisce l'estensione del file
(comprensivo di punto) passato come parametro;
- %~s1: restituisce il percorso completo in formato
breve (8.3) del file o cartella passato come parametro;
- %~a1: restituisce gli attributi del file o cartella
passato come parametro;
- %~t1: restituisce la data del file o cartella
passato come parametro;
- %~z1: restituisce la dimensione del file o cartella
passato come parametro;
- %~$PATH:1: restituisce il percorso completo
dell'eseguibile passato come parametro, a patto che si trovi nella
variabile d'ambiente PATH;
- %CmdCmdLine%: restituisce l'intera linea di
comando;
- %*: restituisce tutti i parametri;
Queste sintassi possono essere combinate tra loro, ad esempio "%~dp1"
restituirà sia lettera dell'unità che percorso. Per meglio comprendere
vediamo un esempio completo con relativo responso (esempio.bat):
@echo off echo %%CmdCmdLine%%:%CmdCmdLine% echo %%*: %* echo
%%1: %1 echo %%2: %2 echo %%~f1: %~f1 echo %%~d1: %~d1 echo
%%~p1: %~p1 echo %%~n1: %~n1 echo %%~x1: %~x1 echo %%~s1: %~s1
echo %%~a1: %~a1 echo %%~t1: %~t1 echo %%~dp1: %~dp1 echo
%%~$PATH:2: %~$PATH:2
Proviamo quindi ad effettuare la chiamata
seguente (supponendo di trovarci in C:\Cartella e che esista il file
prova.txt):
C:\cartella>esempio.bat prova.txt notepad.exe
%CmdCmdLine%:C:\Windows\system32\cmd.exe %*: prova.txt cmd.exe %1:
prova.txt %2: cmd.exe %~f1: C:\cartella\prova.txt %~d1: C: %~p1:
\cartella\ %~n1: prova %~x1: .txt %~s1: C:\cartella\prova.txt
%~a1: --a------ %~t1: 01/01/1980 15:00 %~dp1: C:\cartella\
%~$PATH:2: C:\Windows\System32\notepad.exe
|