Чому SET PATH = не працює в тому ж пакетному файлі?


2

У мене є флеш-пам'ять USB з портативними установками 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 s. Однак те, що echo %PATH% повертає правильне оновлене значення, що означає, що це не проблема. Також не вдалося start відкриває вікно повідомлень, і виконання не переходить до останніх двох рядків, поки це не буде зроблено, але ці рядки все ще не виконані.

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

Я тестую на Windows 7 Professional SP1 без доступу адміністратора.

Що тут відбувається, і як це можна виправити?

Відповіді:


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

Що ви не повинні робити, це включити котирування в цінність, але ви можете (і в тих самих випадках ви повинні) цитувати завдання.


2

Я знайшов свою відповідь: у вікні не повинно бути жодних цитат set PATH= лінії. Вона працювала вдруге в тому ж вікні, тому що на початку була рівна кількість цитат.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.