В cmd окно я не могу cd в каталог , если он установлен с помощью переменной окружения пользователя.
Содержание переменной в порядке.
Если я cd в каталог, заданный содержимым переменной, он тоже будет работать нормально.

Не могли бы вы объяснить поведение cmd ?

2 ответа2

3

Вам необходимо установить переменную env IB_WORKSPACE_PATH перед тем, как установить IB_ENVIRONMENT_PATH , в противном случае она будет интерпретироваться как буквенная строка и, следовательно, не является допустимым путем. Расширение переменной выполняется только один раз.

Правильный:

set IB_WORKSPACE_PATH=c:\foo
set IB_ENVIRONMENT_PATH=%IB_WORKSPACE_PATH%\bar
echo %IB_WORKSPACE_PATH%
c:\foo
echo %IB_ENVIRONMENT_PATH%
c:\foo\bar

Неправильно:

set IB_ENVIRONMENT_PATH=%IB_WORKSPACE_PATH%\bar
set IB_WORKSPACE_PATH=c:\foo
echo %IB_WORKSPACE_PATH%
c:\foo
echo %IB_ENVIRONMENT_PATH%
%IB_WORKSPACE_PATH%\bar

редактировать 2: я проверил еще несколько .. Если вы создаете переменные среды с помощью системного диалога, он правильно создает IB_ENVIRONMENT_PATH в качестве значения REG_EXPAND_SZ и обрабатывается правильно (если также определен IB_WORKSPACE_PATH ).

Итак, главный вопрос - как была установлена переменная.

2

Если пользователь явно хранит литерал %variable% внутри другой переменной, его не следует раскрывать позднее во время выполнения, потому что, если пользователь захочет напечатать эту строку?

Обходной путь использует call для отложенного расширения

C:\Users\>set "IB_WORKSPACE_PATH=C:\Windows"

C:\Users\>set "IB_ENVIRONMENT_PATH=^%IB_WORKSPACE_PATH^%\System32"

C:\Users\>echo %IB_ENVIRONMENT_PATH%
%IB_WORKSPACE_PATH%\System32

C:\Users\>cd %IB_ENVIRONMENT_PATH%
The system cannot find the path specified.

C:\Users\>call echo %IB_ENVIRONMENT_PATH%
C:\Windows\System32

C:\Users\>call cd %IB_ENVIRONMENT_PATH%

C:\Windows\System32>

Как вы можете видеть, cd не работает, но call cd будет работать

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .