创建批处理文件来为所有用户备份和恢复网络打印机

创建批处理文件来为所有用户备份和恢复网络打印机

我有一台具有多个配置文件的 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

相关内容