2

У меня есть флешка с портативными установками Dropbox и emacs. Одна из функций, которую я хочу запустить в emacs, должна иметь sha1sum.exe , поэтому я также помещаю coreutils на USB. Я пишу командный файл, который:

  1. Помещает путь к sha1sum.exe в PATH. (пока я в этом, также путь к emacs и Dropbox)
  2. Запускает Dropbox в отдельном процессе.
  3. Запускает Emacs.

Вот что у меня есть:

set PATH="%PATH%;%~d0\pathtocoreutils\bin;%~d0\pathtodropbox;%~d0\pathtoemacs\bin"
echo %PATH%
timeout 10
start DropboxPortableAHK.exe
timeout 10
runemacs.exe

Когда я запускаю его в новом командном окне, команды set и echo дают ожидаемые результаты, но все остальное выдает ошибки, указывающие на то, что файлы не находятся в пути (включая timeout , который был добавлен для отладки и отсутствует ни в одном из новые записи 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.

Если я запускаю его второй раз в том же командном окне, то он работает нормально. Выполнение тех же команд индивидуально из командной строки также работает. Открытие нового терминала также приведет к сбою пакетного файла один раз. Я хотел бы иметь возможность запускать пакетный файл, щелкая по нему, но в этом случае нет возможности запустить его повторно в том же экземпляре cmd.exe .

Моей первой мыслью было, что выполнение перешло к другим командам до того, как set PATH= была завершена, и PATH была полностью недоступна. Вот почему я добавил время timeout с. Однако тот факт, что echo %PATH% возвращает правильное обновленное значение, говорит о том, что на самом деле это не проблема. Кроме того, при неудачном start открывается окно сообщения, и выполнение не переходит к двум последним строкам до тех пор, пока это не будет сделано, но эти строки по-прежнему не выполняются.

Все, что я смог вспомнить об установке PATH в командном файле, предназначено для людей, пытающихся сохранить изменения в масштабе всей системы. Все ответы предполагают, что нормальное поведение для set PATH= для работы в том же экземпляре терминала, в том числе позже в том же пакетном файле.

Я тестирую на Windows 7 Professional sp1 без прав администратора.

Что здесь происходит, и как я могу это исправить?

2 ответа2

3
set "PATH=%PATH%;%~d0\pathtocoreutils\bin;%~d0\pathtodropbox;%~d0\pathtoemacs\bin"

Что вы не должны делать, это включать кавычки в значение, но вы можете (и в тех же случаях вы должны) заключать в кавычки назначение.

2

Я нашел свой ответ: в строке set PATH= не должно быть кавычек. Он работал второй раз в том же окне, потому что тогда было четное количество цитат в начале.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .