![根据路径字符串的形式,cmd 的行为有所不同](https://linux22.com/image/1532995/%E6%A0%B9%E6%8D%AE%E8%B7%AF%E5%BE%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E5%BD%A2%E5%BC%8F%EF%BC%8Ccmd%20%E7%9A%84%E8%A1%8C%E4%B8%BA%E6%9C%89%E6%89%80%E4%B8%8D%E5%90%8C.png)
答案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
会起作用