Script de lot - Utilisation de l'opérateur SHIFT

L'une des limites des arguments de ligne de commande est qu'il ne peut accepter que des arguments jusqu'à% 9. Prenons un exemple de cette limitation.

Exemple

@echo off
echo %1
echo %2
echo %3
echo %4
echo %5
echo %6
echo %7
echo %8
echo %9
echo %10

Production

Si le code ci-dessus est stocké dans un fichier appelé test.bat et que le fichier est exécuté en tant que

test.bat a b c d e f g h i j

Ensuite, ce sera la sortie.

a 
b
c
d
e
f
h
i
a0

Comme vous pouvez le voir à partir de la sortie ci-dessus, la valeur finale qui devrait être affichée comme «j» est affichée comme a0. C'est parce qu'il n'y a aucun paramètre connu sous le nom de% 10.

Cette limitation peut être évitée en utilisant l'opérateur SHIFT. Une fois que votre fichier de commandes a traité son ou ses premiers paramètres, il peut les SHIFT (insérer simplement une ligne avec uniquement la commande SHIFT), ce qui fait que% 1 obtient la valeur B,% 2 la valeur C, etc., jusqu'à% 9, ce qui obtient maintenant la valeur J. Continuez ce processus jusqu'à ce qu'au moins% 9 soit vide.

Examinons un exemple d'utilisation de l'opérateur SHIFT pour surmonter la limitation des arguments de ligne de commande.

Exemple

@ECHO OFF
:Loop

IF "%1"=="" GOTO Continue
   echo %1%
SHIFT
GOTO Loop
:Continue

Si le code ci-dessus est stocké dans un fichier appelé test.bat et que le fichier est exécuté en tant que

test.bat a b c d e f g h i j

Ensuite, ce sera la sortie.

a 
b
c
d
e
f
h
i
j

Remarque

Certains caractères de la ligne de commande sont ignorés par les fichiers batch, selon la version DOS, s'ils sont "échappés" ou non, et souvent en fonction de leur emplacement dans la ligne de commande -

  • Les virgules (",") sont remplacées par des espaces, sauf si elles font partie d'une chaîne entre guillemets.

  • Les points-virgules (";") sont remplacés par des espaces, sauf s'ils font partie d'une chaîne entre guillemets.

  • Les caractères "=" sont parfois remplacés par des espaces, pas s'ils font partie d'une chaîne entre guillemets.

  • La première barre oblique ("/") est remplacée par un espace uniquement si elle suit immédiatement la commande, sans espace de début.

  • Les espaces multiples sont remplacés par un seul espace, sauf s'ils font partie d'une chaîne entre guillemets.

  • Les onglets sont remplacés par un seul espace.

  • Les espaces de début avant le premier argument de ligne de commande sont ignorés.

  • Les espaces de fin après le dernier argument de ligne de commande sont supprimés.