Por que SET PATH = não está funcionando no mesmo arquivo de lote?

2

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:

  1. Coloca o caminho para o sha1sum.exe no PATH. (enquanto eu estou nisso, também o caminho para o emacs e o Dropbox)
  2. Executa o Dropbox em um processo separado.
  3. Executa o emacs.

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?

    
por brendan 20.04.2015 / 23:30

2 respostas

3
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.

    
por 21.04.2015 / 07:55
2

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.

    
por 21.04.2015 / 00:14