- Come lavorare con i parametri batch -
 
TUTORIAL
Gestire in maniera avanzata i parametri nei file batch

File batch di esempio in esecuzione

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

 

<< INDIETRO