2012-11-17 98 views
1

我试图写一个批处理脚本,将依次通过以下注册表项,并更新不同的子键的所有打印机:禁用SSNPNotifyEventSetting与蝙蝠

“HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \控制\打印\打印机\”

例如:

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 

我知道这可能是失败的,但是就我自己的想法而言。任何帮助表示赞赏!

回答

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

首先,我查询注册表并将所有需要的注册表项保存到文本文件中。然后,在FOR循环中,我在文件中搜索不同的注册表项,并添加新的子密钥(如果不在根密钥中)。我已经将此添加到了我正在修复的打印服务器的工具中,迄今为止它一直很棒。

0

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

列表printers.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 
+0

感谢您的回应,但我无法让工作。 (在XP上测试)。我试图直接复制命令到CMD并从批处理脚本运行,我不断收到以下错误: 错误:太多命令行参数 我试图删除“/ f */k”希望它会的工作,但仍然失败。有没有我看不到的错字,或者它不工作?无论哪种方式,谢谢你的努力。 – slynch1223

+0

Ops,我只在Windows 7上测试过。原来在Windows XP上reg.exe不支持一些参数;实际上我们不需要它们。 – wangzq