![创建批处理文件来为所有用户备份和恢复网络打印机](https://linux22.com/image/1342418/%E5%88%9B%E5%BB%BA%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E6%9D%A5%E4%B8%BA%E6%89%80%E6%9C%89%E7%94%A8%E6%88%B7%E5%A4%87%E4%BB%BD%E5%92%8C%E6%81%A2%E5%A4%8D%E7%BD%91%E7%BB%9C%E6%89%93%E5%8D%B0%E6%9C%BA.png)
我有一台具有多个配置文件的 XP 计算机。这些配置文件有时会将不同的打印机映射到每个用户。例如:
- 用户 A 映射了网络打印机 1、2 和 5。打印机 2 为默认打印机。
- 用户 B 映射了网络打印机 1、4 和 8。打印机 4 为默认打印机。
- 用户 C 映射了网络打印机 2。打印机 2 为默认打印机。
我的理想是轮询机器上的每个用户,列出他们映射的所有打印机,然后删除重复项,这样我就有了一份映射到机器的唯一打印机列表。理想情况下,我希望看到哪个打印机最常被默认,但这完全是可选的。然后列表将如下所示:
Machine.Old
- Printer 1
- Printer 2 [Defaulted most often]
- Printer 4
- Printer 5
- Printer 8
然后,我想将整个打印机列表恢复到新机器上的每个用户。他们正在迁移到新的 Windows 7 机器。
我已经想出了如何对单用户机器执行此操作,使用以下代码:
Echo exporting printers
reg export HKCU\Printers\Connections %~d0\%username%\printers.reg
net use >%~d0\%username%\mappings.txt
Echo Importing Printers
reg import %~d0\%username%\printers.reg
问题是这只对一个用户有效。我有一个管理员帐户,我想让这个功能同时对多配置文件机器起作用。
答案1
要访问系统上其他用户的注册表项,您必须为每个用户加载注册表配置单元。请参阅reg /?
用户的配置单元文件NTUser.dat
将位于每个用户目录的底部。 C:\Documents and Settings\<User>\NTUser.dat
请注意,这是一个隐藏的系统文件。
我没有时间创建完整的报告,但这里介绍了如何导出所有用户的打印机。这将循环遍历每个用户目录,加载其注册表配置单元,并将打印机导出到驱动器底部的用户目录中。
@echo off
pushd "C:\Documments and Settings\"
for /d %%A in (*) do call :ExportPrinters "%%~dpnA" "%~d0\%%~nA"
popd
goto End
:ExportPrinters <UserDir> <Target>
setlocal
set "xUserDir=%~1"
set "xTarget=%~2"
if not defined xUserDir goto :eof
if not exist "%xUserDir%" goto :eof
if not defined xTarget goto :eof
if not exist "%xTarget%" goto :eof
reg load "HKU\TempHive" "%xUserDir%\NTUser.dat"
reg export "HKU\TempHive\Printers\Connections" "%xTarget%\printers.reg"
reg unload "HKU\TempHive"
endlocal
goto :eof
:End
pause