Script de lote - usando o operador SHIFT

Uma das limitações dos argumentos de linha de comando é que ele pode aceitar apenas argumentos até% 9. Vamos dar um exemplo dessa limitação.

Exemplo

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

Resultado

Se o código acima estiver armazenado em um arquivo chamado test.bat e o arquivo for executado como

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

Em seguida, será a saída.

a 
b
c
d
e
f
h
i
a0

Como você pode ver na saída acima, o valor final que deve ser mostrado como 'j' está sendo mostrado como a0. Isso ocorre porque não há parâmetro conhecido como% 10.

Essa limitação pode ser evitada usando o operador SHIFT. Depois que seu arquivo em lote manipulou seu (s) primeiro (s) parâmetro (s), ele poderia SHIFT (apenas inserir uma linha com apenas o comando SHIFT), resultando em% 1 obtendo o valor B,% 2 obtendo o valor C, etc., até% 9, que agora obtém o valor J. Continue este processo até que pelo menos% 9 esteja vazio.

Vejamos um exemplo de como usar o operador SHIFT para superar a limitação dos argumentos da linha de comando.

Exemplo

@ECHO OFF
:Loop

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

Se o código acima estiver armazenado em um arquivo chamado test.bat e o arquivo for executado como

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

Em seguida, será a saída.

a 
b
c
d
e
f
h
i
j

Nota

Alguns caracteres na linha de comando são ignorados por arquivos em lote, dependendo da versão DOS, sejam eles "escapados" ou não, e muitas vezes dependendo de sua localização na linha de comando -

  • As vírgulas (",") são substituídas por espaços, a menos que façam parte de uma string entre aspas duplas.

  • Os pontos e vírgulas (";") são substituídos por espaços, a menos que sejam parte de uma string entre aspas duplas.

  • Os caracteres "=" às vezes são substituídos por espaços, não se fizerem parte de uma string entre aspas duplas.

  • A primeira barra ("/") é substituída por um espaço apenas se seguir imediatamente o comando, sem um espaço inicial.

  • Vários espaços são substituídos por um único espaço, a menos que façam parte de uma string entre aspas duplas.

  • As guias são substituídas por um único espaço.

  • Os espaços antes do primeiro argumento da linha de comando são ignorados.

  • Espaços à direita após o último argumento da linha de comando são cortados.