需要帮助找到错误批处理命令的根本原因

时间:2009-11-12 22:42:52

标签: command-line batch-file

IF %processor_architecture% == AMD64 (SET querypath=hklm\software\x) ELSE (SET dsetquerypath=hklm\software\y)

FOR /F "tokens=* delims=\" %%G IN ('REG QUERY "%querypath%" 2^>NUL') DO ECHO %%G

让我解释一下我试图通过这个批处理命令完成的事情。 基本上有一个工具可以安装在hklm \ software \ x(32位窗口)和hklm \ software \ y(64位窗口)上。

我需要从注册表中获取软件的确切路径。哪能告诉我机器是32位还是64位并采取适当的措施。但是现在每次使用这个批处理命令时,它总是以hklm \ software \ y返回路径。

我不知道为什么? 这就是我需要帮助才能使这个批处理文件正确的。

4 个答案:

答案 0 :(得分:2)

编辑:我认为this可以为您的问题提供解释和解决方案,也可以批量生产:)

==周围的空格可能会导致您的问题。

您实际上是在比较%processor_architecture%[space][space]AMD64

的值

尝试:

IF %processor_architecture%==AMD64...

如果启用了命令扩展,您还可以执行以下操作:

IF /I %processor_architecture% equ AMD64

/I开关使IF不区分大小写)

答案 1 :(得分:1)

如果引用AMD64,它会按预期工作:

set processor_architecture="AMD64"
IF %processor_architecture% == "AMD64" (SET querypath=hklm\software\x) ELSE > (SET  querypath=hklm\software\y)
echo querypath=%querypath%

答案 2 :(得分:0)

这个怎么样:

ECHO processor_architecture="%processor_architecture%"
SET querypath=hklm\software\y
IF "%processor_architecture%" == "AMD64" SET querypath=hklm\software\x

另请注意,ELSE部分有一些拼写错误;那不是问题吗?

答案 3 :(得分:-1)

我认为你正在成为变量被读取后立即扩展/评估的现象的受害者。在Raymond Chen's blog处对此进行了很好的讨论。

还搜索“立即扩张”和“延迟扩张”。