batch-file
Argomenti della riga di comando del file batch
Ricerca…
Argomenti della riga di comando forniti per i file batch
Gli argomenti della riga di comando del file batch sono valori dei parametri inviati all'avvio del batch. Dovrebbero essere racchiusi tra virgolette se contengono spazi. In un file batch in esecuzione, gli argomenti vengono utilizzati per vari scopi, ad esempio il reindirizzamento a :labels
, impostazione di variabili o comandi in esecuzione.
Gli argomenti sono indicati nel file batch utilizzando %1, %2, ..., %9
.
@echo off
setlocal EnableDelayedExpansion
if not "%1"=="" (
set "dir=%~1" & set "file=%~2"
type !dir!\!file! | find /n /i "True" >nul^
&& echo Success! || echo Failure
)
exit /b
C:\Users\UserName> test.bat "C:\Temp\Test Results" "Latest.log"
Success!
Gli appunti:
- Nell'esempio precedente, le virgolette vengono rimosse utilizzando il modificatore argomento
%~1
. - Le stringhe lunghe sono divise in più righe usando
^
, e c'è uno spazio prima del carattere nella riga successiva.
File batch con più di 9 argomenti
Quando vengono forniti più di 9 argomenti, è possibile utilizzare il comando shift [/n]
, dove /n
significa iniziare all'ennesimo argomento, n è compreso tra zero e otto.
Ripetizione degli argomenti:
:args
set /a "i+=1"
set arg!i!=%~1
call echo arg!i! = %%arg!i!%%
shift
goto :args
Nota, nell'esempio sopra riportato, la variabile di espansione i
viene utilizzata per assegnare valori di argomento alla matrice di variabili. Il comando call
consente di visualizzare tali valori variabili all'interno del loop.
Argomenti di conteggio:
for %%i in (%*) do (set /a ArgCount+=1)
echo %ArgCount%
Imposta una variabile sull'argomento n:
set i=5
call set "path%i%=%%~i"
Spostamento degli argomenti tra parentesi
Consente di avere il seguente example.bat
e chiamarlo con gli argomenti 1
, 2
e 3
:
@echo off
(
shift
shift
echo %1
)
Poiché l'espansione della variabile cambierà dopo il raggiungimento del contesto delle parentesi finali, l'output sarà:
1
Poiché questo potrebbe essere un problema quando ti sposti tra parentesi per accedere all'argomento dovrai usare la chiamata:
@echo off
(
shift
shift
call echo %%1
)
ora l'uscita sarà 3
. Dato che il comando CALL
è usato (che porterà ad un'ulteriore espansione di variabili) con questa tecnica gli argomenti che accedono possono anche essere parametrizzati:
@echo off
set argument=1
shift
shift
call echo %%%argument%
con espansione ritardata:
@echo off
setlocal enableDelayedExpansion
set argument=1
shift
shift
call echo %%!argument!
l'output sarà
3