这次批处理脚本出乎意料

Posted

技术标签:

【中文标题】这次批处理脚本出乎意料【英文标题】:batch script was unexpected this time 【发布时间】:2015-12-30 05:49:38 【问题描述】:

运行此脚本后显示一些软件是意外的,这次我使用的是 Windows 7 64 位。尝试使用注册表获取软件的安装位置。如果我回显 THE_NAME,那么我会得到正确的安装位置,但脚本会退出,如果其他人说这次某些软件出乎意料

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.
 )

【问题讨论】:

【参考方案1】:

您的脚本没有使用 KEY_NAME 或 VALUE_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 以便我可以测试...

您将希望以此为指导来指导您的最终脚本。

【讨论】:

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

以上是关于这次批处理脚本出乎意料的主要内容,如果未能解决你的问题,请参考以下文章

Windows批处理脚本陷入死循环问题

写个批处理脚本来帮忙干活--遍历文件夹&字符串处理

写个批处理脚本来帮忙干活--遍历文件夹&字符串处理

Android测试提升效率批处理脚本

npm 运行脚本 < 出乎意料

Excel处理数据用到的一些公式和VBA脚本