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.