El comando: "SHIFT" está activado Windows 12, 11, 10, .. , MS Server 2025, 2022, 2019, .. disponible
Los ejemplos del comando "SHIFT"
El
`SHIFT`El comando en el símbolo del sistema de Windows se usa para mover la posición de los parámetros en un archivo por lotes. A continuación se muestran algunos ejemplos del uso de
`SHIFT`-Dominio:
Ejemplo 1: iterar a través de parámetros en un archivo por lotes:
@ECHO OFF
:LOOP
IF "%1"=="" GOTO END
ECHO Parameter: %1
SHIFT
GOTO LOOP
:END
Descripción: Este ejemplo utiliza un bucle para recorrer todos los parámetros en un archivo por lotes y mostrarlos uno por uno. El comando
`SHIFT`se utiliza para mover la posición de los parámetros.
Ejemplo 2: Sumar parámetros en un archivo por lotes:
@ECHO OFF
SET TOTAL=0
:ADD_LOOP
IF "%1"=="" GOTO END_ADD
SET /A TOTAL+= %1
SHIFT
GOTO ADD_LOOP
:END_ADD
ECHO total: %TOTAL%
Descripción: En este ejemplo los parámetros se suman en un bucle. El comando
`SHIFT`mueve la posición del parámetro y
`SET /A`se utiliza para actualizar el total.
Ejemplo 3: Trabajar con bucles anidados y SHIFT:
@ECHO OFF
:OUTER_LOOP
IF "%1"=="" GOTO END_OUTER
ECHO Outer Parameter: %1
SHIFT
:INNER_LOOP
IF "%1"=="" GOTO END_INNER
ECHO Inner Parameter: %1
SHIFT
GOTO INNER_LOOP
:END_INNER
GOTO OUTER_LOOP
:END_OUTER
Descripción: Este ejemplo muestra cómo
`SHIFT`se puede utilizar en bucles anidados. El bucle exterior procesa los parámetros externos mientras que el bucle interior procesa los parámetros internos.
Ejemplo 4: Saltar parámetros con SHIFT:
@ECHO OFF
SHIFT
SHIFT
ECHO Tercero Parameter: %1
Descripción: Aquí los dos primeros parámetros se utilizan con dos
`SHIFT`Los comandos se omiten y se muestra el tercer parámetro.
Ejemplo 5: Verificar y manejar parámetros:
@ECHO OFF
:PARAM_LOOP
IF "%1"=="" GOTO END_PARAM
IF /I "%1"=="/DEBUG" (
ECHO Debug-Modo activado.
SHIFT
GOTO PARAM_LOOP
)
ECHO Proceso Parameter: %1
SHIFT
GOTO PARAM_LOOP
:END_PARAM
Descripción: Este ejemplo comprueba si el primer parámetro es
"/DEBUG". Si este es el caso, se emite un mensaje y se omite el parámetro.
El
`SHIFT`El comando es particularmente útil en scripts por lotes donde es necesario procesar un número variable de parámetros. Tenga en cuenta que
`SHIFT`mueve el contenido de la lista de parámetros y reasigna las posiciones de los parámetros. Por lo tanto, es importante
`SHIFT`Úselo con prudencia y de acuerdo con la lógica de su secuencia de comandos por lotes.
"SHIFT" Extracto de la ayuda de Microsoft Windows
Microsoft Windows [Version 10.0.19045.3693]
(c) Copyright 1985-2023 Microsoft Corp.
C:\\WINDOWS>
Cambia la posición de parámetros reemplazables en un archivo por
lotes.
SHIFT [/n]
Si las extensiones de comando están habilitadas, el comando SHIFT
admitirá el modificador /n, el cual informa al comando que
empiece a
cambiar en el argumento n, en donde n puede estar comprendido
entre 0 y 8.
Por ejemplo:
SHIFT /2
cambiará %3 a %2, %4 a %3, etc. y deja %0 y %1 sin modificar.
Información importante, consejos para el comando "SHIFT"
Al usar el
`SHIFT`comando en scripts por lotes, hay algunos aspectos importantes a considerar:
1.
Pérdida de parámetros: Si
`SHIFT`esto mueve la posición de los parámetros en la lista de parámetros hacia la izquierda. Esto significa que el valor del primer parámetro (
`%1`) por el del segundo parámetro (
`%2`) se reemplaza, el segundo parámetro se convierte en el tercero (
`%3`), Etcétera. El valor del último parámetro (
`%9`) se pierde, y el valor de
`%0`(el nombre del script) permanece sin cambios.
2.
Número de turnos: Puedes
`SHIFT`sólo nueve veces en un script por lotes porque sólo hay nueve parámetros numéricos (
`%0`hasta
`%9`) da. Después del noveno turno, el valor del noveno parámetro permanece perdido.
3.
SHIFT en bucles: Si
`SHIFT`en un bucle, debe asegurarse de que las condiciones se verifiquen correctamente para evitar un bucle infinito si no hay otros parámetros.
@ECHO OFF
:LOOP
IF "%1"=="" GOTO END_LOOP
ECHO Parameter: %1
SHIFT
GOTO LOOP
:END_LOOP
4.
SHIFT en bucles anidados: Si
`SHIFT`En bucles anidados, tenga en cuenta que mover los parámetros en un bucle también afecta las posiciones de los parámetros en los bucles anidados.
@ECHO OFF
:OUTER_LOOP
IF "%1"=="" GOTO END_OUTER
ECHO Outer Parameter: %1
SHIFT
:INNER_LOOP
IF "%1"=="" GOTO END_INNER
ECHO Inner Parameter: %1
SHIFT
GOTO INNER_LOOP
:END_INNER
GOTO OUTER_LOOP
:END_OUTER
5.
Expansión retrasada y SHIFT: Si
`SHIFT`en combinación con expansión retrasada (
`ENABLEDELAYEDEXPANSION`), tenga en cuenta que
`!`no se utiliza para expansión retardada
`%`.
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET COUNT=0
:LOOP
IF "!1"=="" GOTO END_LOOP
SET /A COUNT+=1
SHIFT
GOTO LOOP
:END_LOOP
ECHO número de Parameter: %COUNT%
Es importante considerar el orden y la frecuencia de
`SHIFT`planifique cuidadosamente para garantizar que los parámetros se muevan como se esperaba y que no se pierda información. También comprobando si hay parámetros vacíos (
`IF "%1"==""`) es importante para evitar bucles infinitos.