【问题标题】:Query the data of a reg key value and use "goto" and "if" to base output on said value查询某个 reg 键值的数据,并使用“goto”和“if”将输出基于该值
【发布时间】:2016-12-20 21:16:44
【问题描述】:

您好,我正在尝试创建一个批处理文件,用于查询注册表项并根据其值启动特定程序。

我尝试了互联网上的各种组合,但我似乎无法获得正确的行为。

基本上,脚本会检查定义当前 DPI 的 regkey。根据该值,将运行两个程序之一(PowerShell 脚本),然后运行 ​​InternetExplorer.Application 窗口,并具有特定的大小限制。

来源:

到目前为止,我得到的是:

@echo off
setlocal
set "Key=HKCU\Control Panel\Desktop\WindowMetrics"
set Type=REG_DWORD
set Value=AppliedDPI

set Data=
for /f "tokens=2,3" %%a in ('reg query %Key% /v %Value% 2^>NUL ^| find /i "%Value%"') do (
 set TestType=%%a
 set Data=%%b
)
if /i "%Data%"=="0x60" goto Data_96
if /i "%Data%"=="0xc0" goto Data_192
if /i not "%TestType%"=="%Type%" goto :Data_Missing
goto Data_Undefined

:Data_96
echo Data is "%Data%".
goto 96

:Data_192
echo Data is "%Data%".
goto 192

:Data_Missing
echo Key or value not found.
goto leave

:Data_Undefined
echo No action for data "%Data%" defined.
goto leave

:96
powershell.exe -ExecutionPolicy Unrestricted -File somescript1.ps1
goto leave

:192
powershell.exe -ExecutionPolicy Unrestricted -File somescript2.ps1
goto leave

:leave

但这只是行不通。不断收到“找不到键或值”。 我尝试过的其他示例最终都加载了两个脚本。 我显然设置了错误,但不确定是什么。

【问题讨论】:

  • 您需要在 REG QUERY 中的 %key% 变量周围加上引号。 reg query "%Key%" /v %Value%
  • 感谢@Squashman 的回复。不幸的是,现在这会输出另一个错误:“┬áset”不是内部或外部命令、可运行程序或批处理文件。
  • @Squashman 谢谢。在您的帮助下并回答了我自己的以下问题('┬áset' 是因为 'set' 在它之前有一个空格)我现在已经开始工作了!谢谢!
  • 我在您的 set 命令中没有看到任何会导致问题的空格。

标签: powershell batch-file registry


【解决方案1】:

有了@Squashman 的解决方案,并且意识到我自己的错误是在“设置”命令之前有空格,该脚本现在可以按预期工作。

【讨论】:

    【解决方案2】:

    在这里,为了您的信息,是一个应该做同样事情的脚本:

    @Echo Off
    Set "PSS="
    For /F "Tokens=1,3" %%A In (
        'Reg Query "HKCU\Control Panel\Desktop\WindowMetrics" /v AppliedDPI'
    ) Do If /I "%%A"=="AppliedDPI" (If %%B Equ 96 Set PSS=somescript1.ps1
        If %%B Equ 192 Set PSS=somescript2.ps1)
    If defined PSS powershell -ExecutionPolicy Unrestricted -File "%PSS%"
    

    它使用了运算符不关心值是十六进制还是十进制这一事实。

    【讨论】:

    • 感谢您的回复。但是我现在已经编译了脚本,编译并将其包装到安装程序中。因此,在它有效的情况下,在可预见的未来我不会搞砸它。不过感谢您的时间。
    • 没问题,我说过这是为了您的信息。 顺便说一句,如果您在自己的答案中发布完成的脚本,那么您没有理由不能将该答案标记为正确
    猜你喜欢
    • 1970-01-01
    • 2015-08-11
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多