1

我正在尝试编写一个批处理脚本,它将遍历以下注册表项并更新不同的子键:

“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\”

例如:

reg add HKLM\System\CurrentControlSet\Control\Print\<Some Printer>\PrinterDriverData /t REG_DWORD /v SSNPNotifyEventSetting /d 0

我需要为安装的每台打印机运行该更新,我认为 FOR 语句应该能够。我只是不擅长 FOR 语句,这就是我需要帮助的原因。这是我迄今为止研究/尝试过的:

set var1="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\"

FOR /F "PrinterDriverData" %%F IN ('REG QUERY %var1%') DO REG ADD %var1%\%%F\PrinterDriver\Data /t REG_DWORD /v SSNPNotifyEventSetting /d 0

我知道这可能是遥不可及的,但据我自己所知。任何帮助表示赞赏!

4

2 回答 2

1

这是我想出的解决方案。不确定这是最好的方法还是最简单的方法,但到目前为止它有效。请随时批评或改进。

set key="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers"

reg query %key% > temp.txt

FOR /F "delims=" %%a IN ('findstr /B "HKEY_LOCAL_MACHINE" temp.txt') DO (
    if /I NOT "%%a" == %key% (
        reg add "%%a\PrinterDriverData" /f /t REG_DWORD /v SSNPNotifyEventSetting /d 0 
    )
)

首先,我查询注册表并将所有需要的 reg 键保存到一个文本文件中。然后,在 FOR 循环中,我在文件中搜索不同的注册表项,如果不在根项中,则添加新的子项。我已将此添加到我正在构建的用于修复打印服务器的工具中,到目前为止它一直很棒。

于 2012-11-18T22:10:58.297 回答
0

请参考以下批处理文件,该文件可以从注册表项中列出打印机,然后您可以将打印机名称传递给您的脚本以执行更多操作。

列表打印机.bat

@echo off
for /f "tokens=1-8 delims=\" %%a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers"') do if "%%g" NEQ "" @echo %%g
于 2012-11-18T01:45:22.403 回答