相同的命令,不同的结果(命令行或批处理)

时间:2012-05-30 13:39:39

标签: batch-file escaping registry environment-variables command-prompt

我一直在尝试创建一个非常简单的Windows脚本,几乎可以工作(“几乎”解释了我在这里的存在......)。我想链接几个命令。其中之一是添加注册表项。 我已经找到了如何使用以下命令来完成这个技巧:

REG ADD "HKCU\Software\Microsoft\Office\12.0\Common\DRM" /v "AdminTemplatePath" /t REG_EXPAND_SZ /d ^%LocalAppData^%\Microsoft\DRM\Templates /f

我想添加名为“ AdminTemplatePath ”的密钥,其值为“%LocalAppData%\ Microsoft \ DRM \ Templates ”。

问题与环境变量%LocalAppData%有关。当我执行REG ADD /?时,它说我必须在每个“”之前加上“ ^ ”才能使命令行正常工作(没有“ ^ “,变量将被解释并替换为其绝对值。”

当我在提示符中输入完整命令时,一切正常。我在值字段“%LocalAppData%\ Microsoft \ DRM \ Templates ”中。当我在批处理文件中复制/粘贴此命令时,运行时没问题。系统告诉我一切都很好。但实际上,值是“ ^ \ Microsoft \ DRM \ Templates ”或“ \ Microsoft \ DRM \ Templates ”。

当我在完整命令中删除“ ^ ”并重试时,值为“ C:\ Users \ My User \ AppData \ Local \ Microsoft \ DRM \ Templates ”。

有人知道保持环境变量的技巧,运行批处理文件吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

^被认为是批处理脚本中的转义字符,但我也一直遇到麻烦。

相反,请尝试用双引号括起来的双倍百分比:

^%LocalAppData^%\Microsoft\DRM\Templates

应该是

"%%LocalAppData%%\Microsoft\DRM\Templates"

有关批处理脚本中转义字符的详细信息,请查看http://www.robvanderwoude.com/escapechars.php