linha de comando .cmd / script .bat, como obter o diretório de script em execução

StackOverflow https://stackoverflow.com/questions/130112

  •  02-07-2019
  •  | 
  •  

Pergunta

Como você pode obter o diretório do script que foi executado e usá-lo dentro do arquivo .cmd?

Foi útil?

Solução

Raymond Chen tem algumas ideias:

https://devblogs.microsoft.com/oldnewthing/20050128- 00 /? p = 36573

Citado aqui na íntegra porque arquivos MSDN tendem a ser pouco fiáveis:

A maneira mais fácil é usar a pseudo-variável %CD%. Ele se expande para o diretório de trabalho atual.

set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory

(Claro, diretório save / restore poderia mais facilmente ter sido feito com pushd / popd, mas isso não é o ponto aqui.)

O truque %CD% é útil até mesmo na linha de comando. Por exemplo, eu muitas vezes encontro-me em um diretório onde há um arquivo que eu quero operar, mas ... oh, eu preciso chdir para algum outro diretório, a fim para realizar essa operação.

set _=%CD%\curfile.txt
cd ... some other directory ...
somecommand args %_% args

(Eu gosto de usar %_% como a minha variável de ambiente do zero.)

Tipo SET /? para ver os outros pseudo-variáveis ??fornecidas pelo comando processador.

Também os comentários no artigo são bem vale a digitalização, por exemplo, um presente (através do Wayback Machine, uma vez que os comentários são ido de artigos mais antigos):

http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741

Isto cobre o uso de% ~ DP0:

Se você quer saber onde vive o arquivo de lote: %~dp0

%0 é o nome do arquivo em lotes. ~dp dá-lhe a unidade e caminho o argumento especificado.

Outras dicas

Este é equivalente ao caminho do script:

%~dp0

Este usa a sintaxe lote extensão parâmetro. Parâmetro 0 é sempre o próprio script.

Se o seu script é armazenado no C:\example\script.bat, avalia então %~dp0 para C:\example\.

ss64.com tem mais informações sobre a sintaxe de extensão parâmetro. Aqui está o trecho relevante:

Você pode obter o valor de qualquer parâmetro usando um% seguido por sua posição numérica na linha de comando.

[...]

Quando um parâmetro é usado para fornecer um nome de arquivo, em seguida, a seguinte sintaxe estendida pode ser aplicada:

[...]

% ~ d1 Expandir% 1 apenas para uma letra de unidade - C:

[...]

% ~ p1 Expandir% 1 para somente um caminho por exemplo \ Utils \ esta inclui uma fuga \ o que pode ser interpretado como um caractere de escapar por alguns comandos.

[...]

Os modificadores acima podem ser combinadas:

% ~ dp1 Expandir% 1 para uma letra de unidade e caminho única

[...]

Você pode obter o caminho do script em lotes-se com% 0, as extensões dos parâmetros podem ser aplicados a este modo% ~ DP0 voltará a unidade eo caminho para o script em lotes, por exemplo W: \ scripts \

for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d

pushd %curdir%

Fonte

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top