Командний рядок - Як додати заданий шлях тільки для цього файлу, який виконується?


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
Якщо ви додасте setlocalдо свого пакетного файлу, шлях видно лише у файлі
jeb

hw ви додаєте "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 для змінних середовища.)
Andreas Jansson,

Увага! Ця команда перезаписує змінну системного середовища! Я їх видалив і спробую виправити. А також для тих, хто допустив цю помилку: не перезавантажуйте комп’ютер. Напишіть, echo %path%і ви отримаєте поточний завантажений шлях. Вам потрібно відрізняти змінні середовища користувача та системи один від одного. Тоді ви можете вручну застосувати їх до потрібного місця.
Альпер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.