Командная строка - Как добавить заданный путь только для выполнения этого пакетного файла?

187

По сути, я знаю, что могу пройти через панель управления и изменить переменную пути. Но мне интересно, есть ли способ через пакетное программирование включить временный путь? Таким образом, он используется только во время выполнения этого пакетного файла. Я не хочу, чтобы люди заходили и изменяли свои переменные пути только для того, чтобы использовать мой командный файл.

Майкл
источник

Ответы:

318

Как и любая другая переменная окружения, с SET:

SET PATH=%PATH%;c:\whatever\else

Если вы хотите, чтобы сначала была встроена небольшая проверка безопасности, проверьте, существует ли сначала новый путь:

IF EXIST c:\whatever\else SET PATH=%PATH%;c:\whatever\else

Если вы хотите, чтобы это было локально для этого пакетного файла, используйте setlocal:

setlocal
set PATH=...
set OTHERTHING=...

@REM Rest of your script

Внимательно прочитайте документы для setlocal/ endlocalи взгляните на другие ссылки на этом сайте - функции тоже довольно интересные, а синтаксис хитрый.

Синтаксис страница должна вам начать с основ.

Мат
источник
3
Если вы добавите a setlocalв свой пакетный файл, путь будет виден только в файле
jeb
Как вы добавляете "setlocal"? Это вместо "SET"?
Майкл
@micheal: обновил мой ответ ссылками. Пожалуйста, прочитайте некоторые документы / примеры / учебные пособия о сценариях cmd - SETэто действительно то, что вы должны знать и понимать, прежде чем выполнять какие-либо сценарии.
Мат
2
Спасатель жизни. Мне нужно было добавить EV на сервер, который не может быть перезапущен, и это позволяет мне делать то, что мне нужно, не планируя перезапуск!
dav_i
8
Даже без SETLOCALэтого, в большинстве случаев, это будет только для этого отдельного сеанса командной строки - если вы делаете это из более чем одного пакетного файла и используете EXIT /B %N%, тогда, SETLOCALв основном, вы просто сбросите свои изменения при выходе из сценария. : - /
BrainSlugs83
21

Есть важная деталь:

set PATH="C:\linutils;C:\wingit\bin;%PATH%"

не работает, пока

set PATH=C:\linutils;C:\wingit\bin;%PATH%

работает. Разница в кавычках!

UPD также см. Комментарий от Venimus

18446744073709551615
источник
3
на самом деле это должны быть SET "PATH=...%PATH%"пробелы, существующие в пути, что приведет к ошибкам или неправильному поведению. Заключение в такие кавычки не будет включать их, но будет правильно устанавливать переменную. То же самое работает для любой другой переменной env.
Venimus
20

Это верно, но это не меняет это постоянно, но только для текущей командной строки, если вы хотите изменить это постоянно, вы должны использовать, например, это:

setx ENV_VAR_NAME "DESIRED_PATH" /m

Это изменит его навсегда, и да, вы можете перезаписать его другим пакетным скриптом.

dumbak
источник
Может быть, /mдолжно быть после setx?
Suzanshakya
У меня работает то же самое, но этот Win Batch Scripting - небольшой незаконченный бизнес от MS. В моей компании, где у нас все одинаковые ноутбуки с одной и той же системой, не существует универсального сценария для настройки PATH, и мы поддерживаем 2 или 3 из них, поэтому все, что вам
подходит
Спасибо за обновление. В Windows Server 2012, когда я ставил /mв конце, DESIRED_PATHбыл добавлен с / m в конце только для текущего пользователя.
Suzanshakya
11
Слово предостережения. Используя setx на пути, пытаясь добавить к нему больше, и длина строки> 1024, я обнаружил, что результат (моя среда PATH) был обрезан навсегда. (Хорошо, что у меня была возможность скопировать% PATH%, который был у меня в ECHOed до изменения, и вернуть его обратно с помощью инструмента Windows «Переменные среды».)
Андреас Янссон
Внимание! Эта команда напрямую перезаписывает системную переменную среды! Я удалил их и пытаюсь их исправить. А также для тех, кто сделал эту ошибку: не перезагружайте компьютер. Напишите, echo %path%и вы получите текущий загруженный путь. Вам необходимо отличать переменные среды пользователя и системы друг от друга. Затем вы можете вручную применить их в нужном месте.
Alper