为什么env变量的名称中的数字从批处理文件中解释不正确?

时间:2013-12-09 22:29:20

标签: windows batch-file environment-variables

我们有一台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'?

2 个答案:

答案 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?