Como já foi dito, os parâmetros passados pela linha de comando podem ser acessados em arquivos em lotes com a notação %1
para %9
. Há também outros dois tokens que você pode usar:
%0
é o nome do arquivo executável (arquivo em lote), conforme especificado na linha de comando .
%*
são todos os parâmetros especificados na linha de comando - isso é muito útil se você deseja encaminhar os parâmetros para outro programa.
Também há muitas técnicas importantes a serem observadas, além de simplesmente como acessar os parâmetros.
Verificando se um parâmetro foi passado
Isso é feito com construções como IF "%~1"==""
, o que é verdadeiro se e somente se nenhum argumento foi passado. Observe o caractere til que faz com que as aspas circundantes sejam removidas do valor de %1
; sem um til, você obterá resultados inesperados se esse valor incluir aspas duplas, incluindo a possibilidade de erros de sintaxe.
Lidar com mais de 9 argumentos (ou apenas facilitar a vida)
Se você precisar acessar mais de 9 argumentos que você tem que usar o comando SHIFT
. Este comando altera os valores de todos os argumentos em um único lugar, de modo que %0
assume o valor de %1
, %1
assume o valor de %2
etc. %9
assume o valor do décimo argumento (se houver algum), que não estava disponível por meio de nenhuma variável antes de chamar SHIFT
(digite comando SHIFT /?
para mais opções).
SHIFT
também é útil quando você deseja processar facilmente parâmetros sem exigir que eles sejam apresentados em uma ordem específica. Por exemplo, um script pode reconhecer os sinalizadores -a
e -b
em qualquer ordem. Uma boa maneira de analisar a linha de comando nesses casos é
:parse
IF "%~1"=="" GOTO endparse
IF "%~1"=="-a" REM do something
IF "%~1"=="-b" REM do something else
SHIFT
GOTO parse
:endparse
REM ready for action!
Esse esquema permite analisar linhas de comando bastante complexas sem enlouquecer.
Substituição de parâmetros de lote
Para parâmetros que representam nomes de arquivos, o shell fornece muitas funcionalidades relacionadas ao trabalho com arquivos que não são acessíveis de nenhuma outra maneira. Essa funcionalidade é acessada com construções que começam com %~
.
Por exemplo, para obter o tamanho do arquivo passado como argumento, use
ECHO %~z1
Para obter o caminho do diretório de onde o arquivo em lotes foi iniciado (muito útil!), Você pode usar
ECHO %~dp0
Você pode visualizar toda a gama desses recursos digitando CALL /?
no prompt de comando.