Batch file 这一次批处理脚本是意外的

Batch file 这一次批处理脚本是意外的,batch-file,scripting,Batch File,Scripting,运行此脚本后,显示某些软件是意外的,这次我使用的是64位windows 7。正在尝试使用注册表获取软件的安装位置。如果我回显了_名称,那么我就得到了正确的安装位置,但脚本在if-else中退出,表示这次某个软件出人意料 setlocal ENABLEEXTENSIONS set KEY_NAME=HKEY_CURRENT_USER\Software\somesoftware set VALUE_NAME=InstallDirectory SET THEME_NAME= FOR /f "useb

运行此脚本后,显示某些软件是意外的,这次我使用的是64位windows 7。正在尝试使用注册表获取软件的安装位置。如果我回显了_名称,那么我就得到了正确的安装位置,但脚本在if-else中退出,表示这次某个软件出人意料

setlocal ENABLEEXTENSIONS
set KEY_NAME=HKEY_CURRENT_USER\Software\somesoftware
set VALUE_NAME=InstallDirectory

SET THEME_NAME=
FOR /f "usebackq tokens=2,*" %%a in (`REG QUERY "HKEY_CURRENT_USER\Software\somesoftware" /v InstallDirectory`) DO (
    SET THEME_NAME=%%b
)
echo %THEME_NAME%
if defined THEME_NAME (
set PathValue= %THEME_NAME%

     ) else (
   echo %KEY_NAME%\%VALUE_NAME% not found.
 )

您的脚本没有使用KEY\u NAME或VALUE\u NAME,这可能就是您精简示例的方式

为了测试,我修改了您的脚本,如下所示,它看起来像我期望的那样工作

setlocal ENABLEEXTENSIONS
set KEY_NAME=HKEY_CURRENT_USER\Software\%1
set VALUE_NAME=InstallDirectory

SET THEME_NAME=
FOR /f "usebackq tokens=2,*" %%a in (`REG QUERY "%KEY_NAME%" /v %VALUE_NAME%`) DO (
    SET THEME_NAME=%%b)
echo THEME_NAME=%THEME_NAME%
if NOT ""=="%THEME_NAME%" (
    set PathValue=%THEME_NAME%
    echo PathValue=%PathValue% 
) else (
    echo %KEY_NAME%\%VALUE_NAME% not found.
)
注意:我将IF测试更改为只测试空字符串,这是我自己调试的回音,我使用了%1以便可以测试


您需要将此作为指导来通知您的最终脚本。

如果您将变量设置为nothing(空),它将被取消定义-您的测试用例清楚地显示了这一点。@Stephan,很好的理解…我想我已经仔细检查过了。我已经从我的答案中删除了这个虚假的例子。