У меня есть флешка с портативными установками Dropbox и emacs. Одна из функций, которую я хочу запустить в emacs, должна иметь sha1sum.exe
, поэтому я также помещаю coreutils на USB. Я пишу командный файл, который:
- Помещает путь к sha1sum.exe в PATH. (пока я в этом, также путь к emacs и Dropbox)
- Запускает Dropbox в отдельном процессе.
- Запускает 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 без прав администратора.
Что здесь происходит, и как я могу это исправить?