Почему значение path не сохраняется в блоке if

Я наблюдаю странное поведение пакетного сценария Windows. Когда установлен PATH вне блока if его значение сохраняется, но значение не сохраняется при установке внутри блока if.

Вот минимальный .bat-файл, который показывает проблему.

@echo off

echo %*

set PATH=c:\Windows;
set "PATH=c:\Program Files\Siemens\NX 9.0\UGII;%PATH%"
PATH
set "PATH=c:\Program Files\Siemens\NX 9.0\UGII\managed;%PATH%"
PATH

set PATH=c:\Windows;

set arg=%1
if "%arg%" == "a" (
   echo "------------------------------------------"
   set "PATH=c:\Program Files\Siemens\NX 9.0\UGII;%PATH%"
   PATH
   set "PATH=c:\Program Files\Siemens\NX 9.0\UGII\managed;%PATH%"
   PATH
)

Вывод сценария при вызове с одним a в качестве единственного аргумента.

a
PATH=c:\Program Files\Siemens\NX 9.0\UGII;c:\Windows;
PATH=c:\Program Files\Siemens\NX 9.0\UGII\managed;c:\Program Files\Siemens\NX 9.0\UGII;c:\Windows;
"------------------------------------------"
PATH=c:\Program Files\Siemens\NX 9.0\UGII;c:\Windows;
PATH=c:\Program Files\Siemens\NX 9.0\UGII\managed;c:\Windows;

Как видите, каталог "c:\Program Files\Siemens\NX 9.0\UGII" отсутствует в последней строке вывода.

Ожидается ли это?

Есть ли способ заставить эту работу работать, не требуя, чтобы PATH был установлен только один раз внутри блока if?

Помимо ссылки, которую я опубликовал, вы понимаете, что это не меняет переменную PATH навсегда. Для этого вам нужно будет использовать SETX.

Squashman 13.09.2018 21:10

@Squashman, нет, я этого не знал.

R Sahu 13.09.2018 21:12

@Squashman, мне нужно изменить ПУТЬ только в скрипте. setx не подходит для моих нужд. Спасибо за информацию.

R Sahu 13.09.2018 21:53

Тогда я бы посоветовал вам быть более осторожными с удалением путей к каталогам. Обычно не рекомендуется удалять SYSTEM32.

Squashman 14.09.2018 04:30

@Squashman, конечно. Опубликованный код имеет отступ минимальный воспроизводимый пример.

R Sahu 14.09.2018 17:27
1
5
35
0

Другие вопросы по теме