set "PATH=%PATH%;%~d0\pathtocoreutils\bin;%~d0\pathtodropbox;%~d0\pathtoemacs\bin"
O que você não deve fazer é incluir as aspas no valor, mas pode (e, em alguns casos, deve) citar a tarefa.
Eu tenho uma unidade flash USB com instalações portáteis do Dropbox e do emacs. Uma das funções que eu quero executar no emacs precisa ter sha1sum.exe
no caminho, então eu também coloco coreutils no USB. Eu estou escrevendo um arquivo de lote que:
Aqui está o que eu tenho:
set PATH="%PATH%;%~d0\pathtocoreutils\bin;%~d0\pathtodropbox;%~d0\pathtoemacs\bin"
echo %PATH%
timeout 10
start DropboxPortableAHK.exe
timeout 10
runemacs.exe
Quando eu o executo em uma nova janela de comando, os comandos set
e echo
fornecem os resultados esperados, mas todo o resto dá erros indicando que os arquivos não estão no caminho (incluindo timeout
, que foi adicionado para depuração e não está em nenhuma das novas entradas PATH):
'timeout' is not recognized as in internal or external command,
executable program or batch file.
The system cannot find the file DropboxPortableAHK.exe.
'timeout' is not recognized as in internal or external command,
executable program or batch file.
'runemacs.exe' is not recognized as in internal or external command,
executable program or batch file.
Se eu executar uma segunda vez na mesma janela de comando, funcionará bem. Executar os mesmos comandos individualmente a partir da linha de comando também funciona. Abrir um novo terminal também fará com que o arquivo em lote falhe uma vez. O comportamento que desejo é poder executar o arquivo em lote clicando nele, mas, nesse caso, não há capacidade de executá-lo uma segunda vez na mesma instância de cmd.exe
.
Meu primeiro pensamento foi que a execução prosseguiu para os outros comandos antes que set PATH=
fosse concluído e PATH
estivesse completamente inacessível. É por isso que adicionei o timeout
s. No entanto, o fato de echo %PATH%
retornar o valor atualizado correto sugere que esse não é realmente o problema. Além disso, o start
com falha abre uma caixa de mensagem e a execução não passa para as duas últimas linhas até que seja feita, mas essas linhas ainda falham.
Tudo o que consegui mostrar sobre a configuração de PATH
em um arquivo de lote é para pessoas que tentam fazer com que a alteração persista em todo o sistema. Todas as respostas sugerem que o comportamento normal é para set PATH=
trabalhar na mesma instância de terminal, incluindo mais tarde no mesmo arquivo de lote.
Estou testando no Windows 7 Professional sp1 sem acesso de administrador.
O que está acontecendo aqui e como posso corrigi-lo?
Encontrei minha resposta: não deve haver cotações na linha set PATH=
. Ele funcionou na segunda vez na mesma janela porque havia um número par de citações no começo.
Tags windows batch-file path