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?

Aaron de Windt
fonte

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?

JRL
fonte
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.

GolezTrol
fonte
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"
J. Bond
fonte
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.

Ping várias vezes
fonte
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%  
anuj0901
fonte
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.

icyrock.com
fonte
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
Darek Adamkiewicz
fonte
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