CMD/BAT - [решено] BAT - Странное поведение (CALL IF)

Ответить
Аватара пользователя
Clinik

CMD/BAT - [решено] BAT - Странное поведение (CALL IF)

Сообщение Clinik »

Есть папки: bin;exec;include



Есть файлы:

exec\shell.bat с содержимым:



Код:

Код: Выделить всё

call ..\bin\set_env.bat
cmd /k cd %~dp0

bin\set_env.bat (вариант 1):



Код:

Код: Выделить всё

cd ..\include
SET INCLUDEPATH=%CD%\
SET ENV=true
echo set var

bin\set_env.bat (вариант 2):



Код:

Код: Выделить всё

if "%ENV%"=="" (
  cd ..\include
  SET INCLUDEPATH=%CD%\
  SET ENV=true
  echo set var
)

При запуске shell.bat:

1 вариант: INCLUDEPATH = c:\test\include\ (как и требуется)

2 вариант: INCLUDEPATH = c:\test\exec\



Вопрос: почему?
Аватара пользователя
Iska

Re: CMD/BAT - [решено] BAT - Странное поведение (CALL IF)

Сообщение Iska »

Цитата Clinik:



Вопрос: почему?
CMD/BAT - [решено] BAT - Странное поведение (CALL IF)




Потому что значение переменной окружения CD вычисляется в момент входа в операторные скобки. Используйте двойное раскрытие:



Код:

Код: Выделить всё

call SET INCLUDEPATH=%%CD%%\

Можно использовать и отложенное раскрытие переменных окружения, но это потребует большего кода.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»