Alterar o diretório atual para o diretório de arquivos em lotes

18

Eu tenho um batarquivo no Windows que executa uma operação procdump . O problema com o arquivo em lotes é que eu preciso primeiro fazer o cd no diretório do arquivo em lotes antes de executar o trabalho, caso contrário, o script não funcionará.

Como mudar para o diretório de arquivos em lotes atual?

Eu tentei o seguinte código no meu procdump.bat:

cd "%~dp"
procdump -h devenv.exe mydump.txt

Mas falhou, a mensagem de erro é:

O uso a seguir do operador path na substituição de parâmetros em lote é inválido:% ~ dp "

Para formatos válidos, digite CALL /? ou para /?

Edit: A resposta fornecida está funcionando, mas há apenas uma captura: se meu diretório atual for diferente do diretório de arquivos em lote, eu receberia uma mensagem "O sistema não consegue encontrar o caminho especificado". Alguém tem alguma idéia?

Graviton
fonte
De onde você tira esse "% ~ dp"?
fretje

Respostas:

24

Ok, acho que encontrei aqui o que você quer dizer com isso %~dp.

Eu acho que o que você realmente quer fazer é o seguinte:

cd /D "%~dp0"

(!) Mas observe que isso ainda não fornecerá o comportamento correto quando você estiver tentando executar seu lote enquanto o diretório atual estiver em outra unidade, pois cdnão altera a unidade ativa.

Edit : Aparentemente (obrigado @Yoopergeek ), você pode adicionar o /Dparâmetro ao cdcomando para permitir que ele também altere o inversor ativo.

fretje
fonte
Para mais informações sobre estes parâmetros em lotes, ver help callem um cmdalerta.
Pausado até novo aviso.
A propósito, você pode combinar esses parâmetros assim:%~dp0
Pausado até novo aviso.
Sua resposta é útil; mas se meu diretório atual estiver em um diretório diferente do arquivo em lote, o comando acima falhará; mesmo cd /Dou cd "%~dp0" /Dnão pode ajudar.
Graviton
@ Ngu Soon Hui: Que o seu diretório atual está em um diretório diferente do arquivo em lote era óbvio. Mas por que esse comando falharia? Eu testei aqui e funciona.
fretje
11
Eu encontrei a solução usando cd /D "%~dp0". Obrigado.
Graviton
4

Gostaria de deixar um comentário para a resposta da fretje, mas evidentemente não posso ???


De qualquer forma, com relação à nota:
Mas observe que isso ainda não fornecerá o comportamento correto quando você estiver tentando executar seu lote enquanto o diretório atual estiver em outra unidade, pois o CD não altera a unidade ativa.


Use a /Dchave no comando do CD, e o CD mudará a unidade ativa.

Yoopergeek
fonte
... ainda posso comentar sobre minha própria resposta. Cara, é uma merda não ter representante no ServerFault ... gostaria que algum representante 'sangrasse' aqui.
22610 Yoopergeek
11
@Yoopergeek: você pode associar suas contas. Isso vai dar-lhe 100 rep aqui se o seu representante no SO é maior do que 200.
fretje