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.