O comando: "SHIFT" está ativado Windows 12, 11, 10, .. , MS Server 2025, 2022, 2019, .. disponível
Os exemplos para o comando "SHIFT"
O
`SHIFT`O comando no prompt de comando do Windows é usado para mover a posição dos parâmetros em um arquivo em lote. Aqui estão alguns exemplos de uso do
`SHIFT`-Comando:
Exemplo 1: Iterar através de parâmetros em um arquivo em lote:
@ECHO OFF
:LOOP
IF "%1"=="" GOTO END
ECHO Parameter: %1
SHIFT
GOTO LOOP
:END
Descrição: Este exemplo usa um loop para iterar todos os parâmetros em um arquivo em lote e exibi-los um por um. O comando
`SHIFT`é usado para mover a posição dos parâmetros.
Exemplo 2: Somar parâmetros em um arquivo em lote:
@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%
Descrição: Neste exemplo os parâmetros são somados em um loop. O comando
`SHIFT`move a posição do parâmetro e
`SET /A`é usado para atualizar o total.
Exemplo 3: Trabalhando com loops aninhados e 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
Descrição: Este exemplo mostra como
`SHIFT`pode ser usado em loops aninhados. O loop externo processa os parâmetros externos enquanto o loop interno processa os parâmetros internos.
Exemplo 4: Ignorando parâmetros com SHIFT:
@ECHO OFF
SHIFT
SHIFT
ECHO Terceiro Parameter: %1
Descrição: Aqui os dois primeiros parâmetros são usados com dois
`SHIFT`os comandos são ignorados e o terceiro parâmetro é exibido.
Exemplo 5: verificar e tratar parâmetros:
@ECHO OFF
:PARAM_LOOP
IF "%1"=="" GOTO END_PARAM
IF /I "%1"=="/DEBUG" (
ECHO Debug-Modo ativado.
SHIFT
GOTO PARAM_LOOP
)
ECHO Processo Parameter: %1
SHIFT
GOTO PARAM_LOOP
:END_PARAM
Descrição: Este exemplo verifica se o primeiro parâmetro é
"/DEBUG". Se for esse o caso, uma mensagem será emitida e o parâmetro será ignorado.
O
`SHIFT`O comando é particularmente útil em scripts em lote onde um número variável de parâmetros precisa ser processado. Observe que
`SHIFT`move o conteúdo da lista de parâmetros e reatribui as posições dos parâmetros. Portanto, é importante
`SHIFT`Use com sabedoria e de acordo com a lógica do seu script em lote.
"SHIFT" Trecho da Ajuda do Microsoft Windows
Microsoft Windows [Version 10.0.19045.3693]
(c) Copyright 1985-2023 Microsoft Corp.
C:\\Windows>
Altera a posição de parâmetros substituíveis num ficheiro batch.
SHIFT [/n]
Se as extensões de comandos estiverem activadas, o comando SHIFT suporta
o parâmetro /n que indica ao comando para deslocar a partir do
n-ésimo argumento, onde o n pode ser um valor entre zero e oito. Por exemplo:
SHIFT /2
deslocará %3 para %2, %4 para %3, etc. e não afecta o %0 e o %1.
Informações importantes, dicas para o comando "SHIFT"
Ao usar o
`SHIFT`comando em scripts em lote, há alguns aspectos importantes a serem considerados:
1.
Perda de parâmetro: Se você
`SHIFT`isso move a posição dos parâmetros na lista de parâmetros para a esquerda. Isso significa que o valor do primeiro parâmetro (
`%1`) pelo do segundo parâmetro (
`%2`) é substituído, o segundo parâmetro se torna o terceiro (
`%3`), e assim por diante. O valor do último parâmetro (
`%9`) é perdido e o valor de
`%0`(o nome do script) permanece inalterado.
2.
Número de turnos: Você pode
`SHIFT`apenas nove vezes em um script em lote porque existem apenas nove parâmetros numéricos (
`%0`até
`%9`) dá. Após a nona mudança, o valor do nono parâmetro permanece perdido.
3.
SHIFT em loops: Se você
`SHIFT`em um loop, você deve garantir que as condições sejam verificadas corretamente para evitar um loop infinito se não houver outros parâmetros.
@ECHO OFF
:LOOP
IF "%1"=="" GOTO END_LOOP
ECHO Parameter: %1
SHIFT
GOTO LOOP
:END_LOOP
4.
SHIFT em loops aninhados: Se você
`SHIFT`em loops aninhados, observe que mover os parâmetros em um loop também afeta as posições dos parâmetros nos loops aninhados.
@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.
Expansão e SHIFT atrasadas: Se você
`SHIFT`em combinação com expansão retardada (
`ENABLEDELAYEDEXPANSION`), Observe que
`!`não é usado para expansão atrasada
`%`.
@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%
É importante considerar a ordem e a frequência das
`SHIFT`planeje cuidadosamente para garantir que os parâmetros sejam movidos conforme o esperado e nenhuma informação seja perdida. Também verificando parâmetros vazios (
`IF "%1"==""`) é importante para evitar loops infinitos.