我们有一台Windows Server 2008 R2计算机,其中包含一个目录,其中包含我们的开发团队使用的所有第三方库。我设置了一个名为3P_Libs
的系统范围环境变量。从cmd提示符我可以看到正确的值:
D:\_AMG_Integration_\_NightlyBuild_>echo %3P_Libs%
D:\_third_party_libraries_
我有一个每晚构建脚本在构建时引用此路径,但它会抛出错误,因为删除了'3'而只留下P_Libs
的值而不是正确的路径。我添加了脚本中值的回显:
D:\_AMG_Integration_\_NightlyBuild_>echo P_Libs
P_Libs
看起来批处理文件将%3自己解释为第3个输入变量,尽管事实上没有为脚本提供任何输入。 有没有什么东西需要做才能逃脱'3'?
答案 0 :(得分:3)
正如Raymond Chen指出的那样,原因是脚本将%3
作为传递给它的第三个参数。
目前解决此问题的唯一方法是使用延迟扩展或for /f
:
setlocal enableDelayedExpansion
echo !3P_Libs!
endlocal
表示/ f:
for /f "tokens=2* delims==" %%a in ('set 3P_Libs') do echo %%a
答案 1 :(得分:2)
你可以这样做:
setlocal enableDelayedExpansion
echo !3P_Libs!
请参阅: How does the Windows Command Interpreter (CMD.EXE) parse scripts?