Qual é o diretório atual em um arquivo em lotes?


510

Eu quero criar alguns arquivos em lotes para automatizar um programa.

Minha pergunta é: quando eu crio o arquivo em lotes, qual é o diretório atual? É o diretório em que o arquivo está localizado ou é o mesmo diretório que aparece no prompt de comando ou algo mais?

Respostas:


1025

De dentro do seu arquivo em lotes:

  • %cd%refere-se ao diretório de trabalho atual (variável)
  • %~dp0 refere-se ao caminho completo para o diretório do arquivo em lotes (estático)
  • %~dpnx0e %~f0ambos se referem ao caminho completo para o diretório em lotes e o nome do arquivo (estático).

Veja também: O que% ~ dp0 significa e como funciona?


5
@ Јοеу - %0poderia dar o nome da sub-rotina atual, mas %~dp0vai sempre dar o caminho completo para o arquivo de lote execução.
dbenham

77
Na verdade, parece que% ~ dp0 fornece o caminho completo para o diretório em que o arquivo em lotes em execução está.% ~ Dpnx0 (que é equivalente a% ~ f0) fornece o caminho completo para o arquivo em lotes. Veja robvanderwoude.com/parameters.php para mais detalhes.
deadlydog

6
Veja também boas respostas detalhadas de uma pergunta semelhante: Obter lista de argumentos passados no script de comandos do Windows (.bat)
olibre

1
Infelizmente, quando executado como um processo a partir de .net% ~ dp0, o diretório de trabalho e não o diretório de arquivos em lote, encontrou isso da maneira mais difícil.
trampster

3
Como um exemplo mais explícito, ao clicar com o botão direito do mouse em um .cmdarquivo e executar como administrador, %cd%fornece C:\WINDOWS\system32e %~dp0fornece o diretório do arquivo em lotes com barra final.
icc97

25

Ele geralmente é o diretório a partir do qual o arquivo de lote é iniciado, mas se você iniciar o arquivo de lote a partir de um atalho, poderia ser dado um diretório de partida diferente. Além disso, quando você estiver no cmd, e seu diretório atual estiver c:\dir3, ainda poderá iniciar o arquivo c:\dir1\dir2\batch.batem lotes usando , nesse caso, o diretório atual será c:\dir3.


11

Em um arquivo em lotes,% cd% é o comando mais comumente usado para o diretório atual, embora você possa definir sua própria variável:

set mypath=%cd%
echo %mypath% (where %mypath% is the current directory that the batch file is sitting in)

Então, diga que você estava querendo abrir o Myprog.exe. Se estivesse na mesma pasta, você usaria o comando:

start %mypath%\Myprog.exe

Isso abriria o Myprog da pasta atual.

A outra opção é criar um diretório em C: chamado AutomatePrograms. Em seguida, você transfere seus arquivos para essa pasta e pode abri-los usando o seguinte comando:

start "" "C:\AutomatePrograms\Myprog1.exe"
start "" "C:\AutomatePrograms\Myprog2.exe"
start "" "C:\AutomatePrograms\Myprog3.exe"

1
Como observado na resposta superior aqui, %cd%é variável; portanto, executar o arquivo em lotes do Windows Explorer como administrador dará o C:\WINDOWS\system32que quase certamente não é o que você deseja. %~dp0é mais consistente.
icc97

6

Digamos que você estava abrindo um arquivo no seu diretório atual. O comando seria:

 start %cd%\filename.filetype

Espero ter respondido sua pergunta.


5

É o diretório de onde você executa o comando para executar seu arquivo em lotes.

Conforme mencionado nas respostas acima, você pode adicionar o comando abaixo ao seu script para verificar:

> set current_dir=%cd%
> echo %current_dir%  

4

É o diretório a partir do qual você inicia o arquivo em lotes. Por exemplo, se o seu lote está dentro c:\dir1\dir2e você faz cd c:\dir3, então execute o lote, o diretório atual será c:\dir3.


0

Apenas meus 2 centavos. O seguinte comando falha se chamado do arquivo em lotes (Windows 7) colocado no pendrive:

xcopy /s /e /i %cd%Ala C:\KS\Ala

Mas isso faz o trabalho:

xcopy /s /e /i %~dp0Ala C:\KS\Ala

Este é o interruptor que eu estava procurando para determinar o caminho do diretório pai do meu arquivo bat sem que o nome arquivo de lote:%~dp0
Ammar Mohammad
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.