这次批处理脚本出乎意料
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,很好……我想我仔细检查了一下。我已从答案中删除了虚假示例。以上是关于这次批处理脚本出乎意料的主要内容,如果未能解决你的问题,请参考以下文章