Script por lotes: uso del operador SHIFT
Una de las limitaciones de los argumentos de la línea de comandos es que solo puede aceptar argumentos hasta% 9. Tomemos un ejemplo de esta limitación.
Ejemplo
@echo off
echo %1
echo %2
echo %3
echo %4
echo %5
echo %6
echo %7
echo %8
echo %9
echo %10
Salida
Si el código anterior se almacena en un archivo llamado test.bat y el archivo se ejecuta como
test.bat a b c d e f g h i j
Luego, lo siguiente será la salida.
a
b
c
d
e
f
h
i
a0
Como puede ver en la salida anterior, el valor final que debe mostrarse como 'j' se muestra como a0. Esto se debe a que no existe ningún parámetro conocido como% 10.
Esta limitación se puede evitar utilizando el operador SHIFT. Después de que su archivo por lotes manejó sus primeros parámetros, podría SHIFT (solo inserte una línea con solo el comando SHIFT), lo que da como resultado que% 1 obtenga el valor B,% 2 obtenga el valor C, etcétera, hasta% 9, que ahora obtiene el valor J. Continúe este proceso hasta que al menos% 9 esté vacío.
Veamos un ejemplo de cómo usar el operador SHIFT para superar la limitación de los argumentos de la línea de comando.
Ejemplo
@ECHO OFF
:Loop
IF "%1"=="" GOTO Continue
echo %1%
SHIFT
GOTO Loop
:Continue
Si el código anterior se almacena en un archivo llamado test.bat y el archivo se ejecuta como
test.bat a b c d e f g h i j
Luego, lo siguiente será la salida.
a
b
c
d
e
f
h
i
j
Nota
Algunos caracteres en la línea de comando son ignorados por los archivos por lotes, dependiendo de la versión de DOS, si están "escapados" o no y, a menudo, dependiendo de su ubicación en la línea de comando:
Las comas (",") se reemplazan por espacios, a menos que formen parte de una cadena entre comillas dobles.
Los puntos y comillas (";") se reemplazan por espacios, a menos que formen parte de una cadena entre comillas dobles.
Los caracteres "=" a veces se reemplazan por espacios, no si son parte de una cadena entre comillas dobles.
La primera barra inclinada ("/") se reemplaza por un espacio solo si sigue inmediatamente al comando, sin un espacio inicial.
Los espacios múltiples se reemplazan por un solo espacio, a menos que formen parte de una cadena entre comillas dobles.
Las pestañas se reemplazan por un solo espacio.
Los espacios iniciales antes del primer argumento de la línea de comandos se ignoran.
Se recortan los espacios finales después del último argumento de la línea de comando.