Obter diretório que contém o script em lote atualmente executado

30

Eu uso %0no arquivo em lotes para obter o diretório que contém o arquivo em lotes, mas o resultado é: -

c:\folder1\folder2\batch.bat

Eu quero apenas o diretório, sem o nome do arquivo em lotes, assim: -

c:\folder1\folder2\

Como eu posso fazer isso? Talvez eu devesse filtrar o caminho. Se sim, como posso fazer isso?

Mohammad AL-Rawabdeh
fonte
Ao usar% 0 em um arquivo em lotes como parte de uma linha de comando, você deve usar% 0 \ .. \ RestOfStuff. O ponto duplo recupera o nome do arquivo.
John Gardeniers
O diretório que contém o script atualmente executado não é necessariamente o mesmo que o diretório de trabalho atual (CD)! Eu editei a pergunta de acordo - agora evita o termo "diretório atual".
chiccodoro

Respostas:

52
%~p0

Retornará apenas o caminho.

%~dp0

Retornará o caminho + drive.

Mais informações sobre o assunto podem ser encontradas no site da Microsoft .

Informações sobre essa sintaxe também podem ser encontradas na ajuda do comando for executando for /?em um sistema operacional Windows.

Bart De Vos
fonte
2
Como outra fonte de referência, a mesma lista de variáveis substituições também é mostrado quando escrevefor /?
Kevin
% ~ dp0 fornece o diretório do arquivo em lotes em execução. Se o arquivo em lotes estiver em um diretório diferente, você receberá esse outro diretório. % CD% sempre fornece o diretório atual.
Mihai Danila
@MhaihaiDanila, não, não foi isso que o OP pediu.
Bart De Vos
Na verdade, cheguei a essa pergunta enquanto procurava uma maneira de obter o diretório atual . Este foi o primeiro sucesso no Google. O título obviamente diz o diretório atual , embora você esteja certo sobre o conteúdo. Nós dois estamos certos, mas acho que mentimos e estamos mais certos sobre o que a pergunta realmente transmite, apesar do que ela pretendia. É por isso que aprimorei a resposta de lain ... O título da pergunta deve ser renomeado para estar sincronizado com a própria pergunta.
Mihai Danila
11
Provavelmente título do artigo na ligação poderia ter sido fornecido, uma vez que o link não mais válido é .....
Rupsingh Mathwale
16

O diretório atual é mantido em% CD%

user9517 suporta GoFundMonica
fonte
4
% CD% reture o caminho que você executar o lote de não onde a exist arquivo de lote
Mohammad AL-Rawabdeh
4
@ Mohammad: Na verdade, é o diretório atual . O outro é o diretório onde está o arquivo em lotes. Esses dois não são os mesmos e sua pergunta pede explicitamente esse. Portanto, edite-o se não é isso que você quer dizer.
Joey #
% CD% retorna o caminho atual do arquivo em lotes, mas falha quando executamos o arquivo em lotes como administrador. Quando executamos o arquivo em lotes como administrador, ele retorna o caminho do System32. Então é melhor opção é usar% ~ DP0 para o caminho completo
% ~ dp0 fornece o diretório do arquivo em lotes em execução. Se o arquivo em lotes estiver em um diretório diferente, você receberá esse outro diretório. % CD% sempre fornece o diretório atual.
Mihai Danila
Para referência do leitor - a pergunta estava originalmente usando o termo "diretório atual" enquanto significa o diretório que contém o script - agora está corrigido.
chiccodoro
4

Algumas expressões que afetam o nome do arquivo:

~f0dará o nome completo do arquivo.
~dpnx0dará o mesmo que ~f0, mas isso mostra que você pode dividi-lo em partes: d = unidade p = caminho n = nome x = extensão

Mechaflash
fonte
0

use o comando chdir

Opção 1:

chdir 

Opção 2:

echo %CD%
sensoft
fonte
O mesmo aqui: essa não era a intenção do OP - a questão agora está mais clara.
chiccodoro