Войти

Показать полную графическую версию : [решено] BAT - Странное поведение (CALL IF)


Clinik
28-02-2017, 05:10
Есть папки: 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
28-02-2017, 06:38
Вопрос: почему? »
Потому что значение переменной окружения CD вычисляется в момент входа в операторные скобки. Используйте двойное раскрытие:
call SET INCLUDEPATH=%%CD%%\
Можно использовать и отложенное раскрытие переменных окружения, но это потребует большего кода.




© OSzone.net 2001-2012