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


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


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

20

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

setx ENV_VAR_NAME "DESIRED_PATH" /m

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


Может быть, /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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.