Script batch: utilizzo dell'operatore SHIFT
Uno dei limiti degli argomenti della riga di comando è che può accettare solo argomenti fino a% 9. Facciamo un esempio di questa limitazione.
Esempio
@echo off
echo %1
echo %2
echo %3
echo %4
echo %5
echo %6
echo %7
echo %8
echo %9
echo %10
Produzione
Se il codice sopra è memorizzato in un file chiamato test.bat e il file viene eseguito come
test.bat a b c d e f g h i j
Quindi segue l'output.
a
b
c
d
e
f
h
i
a0
Come puoi vedere dall'output sopra, il valore finale che dovrebbe essere mostrato come 'j' viene mostrato come a0. Questo perché non esiste alcun parametro noto come% 10.
Questa limitazione può essere evitata utilizzando l'operatore SHIFT. Dopo che il file batch ha gestito i suoi primi parametri, potrebbe spostarli (basta inserire una riga con solo il comando SHIFT), con il risultato che% 1 ottiene il valore B,% 2 ottiene il valore C, eccetera, fino a% 9, che ora ottiene il valore J. Continua questo processo finché almeno% 9 è vuoto.
Diamo un'occhiata a un esempio di come utilizzare l'operatore SHIFT per superare la limitazione degli argomenti della riga di comando.
Esempio
@ECHO OFF
:Loop
IF "%1"=="" GOTO Continue
echo %1%
SHIFT
GOTO Loop
:Continue
Se il codice sopra è memorizzato in un file chiamato test.bat e il file viene eseguito come
test.bat a b c d e f g h i j
Quindi segue l'output.
a
b
c
d
e
f
h
i
j
Nota
Alcuni caratteri nella riga di comando vengono ignorati dai file batch, a seconda della versione DOS, che siano "escape" o meno, e spesso a seconda della loro posizione nella riga di comando -
Le virgole (",") sono sostituite da spazi, a meno che non facciano parte di una stringa tra virgolette.
I punti e virgola (";") sono sostituiti da spazi, a meno che non facciano parte di una stringa tra virgolette doppie.
I caratteri "=" sono talvolta sostituiti da spazi, non se fanno parte di una stringa tra virgolette doppie.
La prima barra ("/") è sostituita da uno spazio solo se segue immediatamente il comando, senza uno spazio iniziale.
Più spazi vengono sostituiti da un unico spazio, a meno che non facciano parte di una stringa tra virgolette doppie.
Le schede vengono sostituite da un singolo spazio.
Gli spazi iniziali prima del primo argomento della riga di comando vengono ignorati.
Gli spazi finali dopo l'ultimo argomento della riga di comando vengono eliminati.