Comportamento diferente de cmd dependendo da forma da string de caminho

0

Na janela cmd não consigo cd para um diretório se ele for definido por uma variável de ambiente do usuário.
O conteúdo da variável é OK.
Se eu cd para o diretório definido pelo conteúdo da variável, também funciona bem.

Você poderia explicar esse comportamento cmd ?

    
por Gangnus 15.06.2017 / 16:37

2 respostas

3

Você precisa definir a variável IB_WORKSPACE_PATH env antes de definir o IB_ENVIRONMENT_PATH , caso contrário, ele será interpretado como uma string literal e, portanto, não é um caminho válido. A expansão variável é realizada apenas uma vez.

Correto:

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

Incorreto:

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

edit 2: Eu testei um pouco mais .. Se você criar as variáveis de ambiente usando o diálogo do sistema, ele criará corretamente o valor IB_ENVIRONMENT_PATH como REG_EXPAND_SZ e será manipulado corretamente (contanto que o IB_WORKSPACE_PATH também esteja definido).

Portanto, a questão principal é como a variável foi definida.

    
por 15.06.2017 / 17:02
2

Se o usuário armazena explicitamente um literal %variable% dentro de outra variável, ele não deve ser expandido posteriormente no tempo de execução, porque e se o usuário quiser imprimir essa sequência?

A solução alternativa é usar call para expansão atrasada

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>

Como você pode ver, cd não funciona, mas call cd funcionará

    
por 16.06.2017 / 08:57