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返回路径。
我不知道为什么? 这就是我需要帮助才能使这个批处理文件正确的。
答案 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处对此进行了很好的讨论。
还搜索“立即扩张”和“延迟扩张”。