根据路径字符串的形式,cmd 的行为有所不同

根据路径字符串的形式,cmd 的行为有所不同

演示cmd截图

cmd窗口中,如果目录是由用户环境变量设置的,则无法cd进入该目录。变量内容正常。

如果我cd进入变量内容设置的目录,它也能正常工作。

您能解释一下这种cmd行为吗?

答案1

您需要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会起作用

相关内容