批处理脚本查询打印机网络名称并更改为其他服务器
问题描述:
我有6个网络打印机在服务器上,需要将它们移动到另一台服务器。我有95个客户端使用它们,但一些只安装了某些打印机。我需要为打印机提供批处理文件查询,如果存在,请将其删除并重新添加到新服务器。这是迄今为止的脚本。我无法弄清楚查询语句。批处理脚本查询打印机网络名称并更改为其他服务器
@ Remove current printer from computer
Rundll32 PrintUI.DLL,PrintUIEntry /dn /q /n \\server6\Printer1
@ Add new Printer to computer
Rundll32 PrintUI.DLL,PrintUIEntry /in /q /n \\server11\Printer1
@ Remove current printer from computer
Rundll32 PrintUI.DLL,PrintUIEntry /dn /q /n \\server6\Printer2
@ Add new Printer to computer
Rundll32 PrintUI.DLL,PrintUIEntry /in /q /n \\server11\Printer2
答
这是应该生成您需要的输出的东西。这是Windows 7中prnmngr.vbs的位置,我认为它位于XP中的System32的根目录下。无论如何,它应该删除旧的并现在添加新的。
@echo off
setlocal
cscript %windir%\System32\Printing_Admin_Scripts\en-US\prnmngr.vbs -l > printers.txt
set count=0
FOR /F "tokens=1-3 delims= " %%G IN (printers.txt) DO call :loop %%G %%H %%I
:loop
if "%1"=="" goto :endloop
if "%1"=="Printer" (
if "%2"=="name" (
if "%3"=="\\server6\Printer1" (
echo Printer1
REM Remove current printer from computer
Rundll32 PrintUI.DLL,PrintUIEntry /dn /q /n \\server6\Printer1
REM Add new Printer to computer
Rundll32 PrintUI.DLL,PrintUIEntry /in /q /n \\server11\Printer1
)
if "%3"=="\\server6\Printer2" (
echo Printer2
REM Remove current printer from computer
Rundll32 PrintUI.DLL,PrintUIEntry /dn /q /n \\server6\Printer2
REM Add new Printer to computer
Rundll32 PrintUI.DLL,PrintUIEntry /in /q /n \\server11\Printer2
)
pause
)
)
SHIFT
goto :loop
:endloop
编辑制作,包括您的删除/添加基于打印机名称匹配功能。
我测试了它,它创建了带有打印机名称的文本文件。我该如何通过脚本读取所以如果\\ server6 \ printer1存在,然后删除并重新添加\\ server11 \ printer1 – user1011061 2012-04-09 13:28:41
我编辑了上述脚本。它不再生成文本文件,而是将打印机名称存储为变量,并根据已知的打印机名称测试该变量。如果找到已知的打印机,它将删除它并添加新的打印机。另外...如果这对你有用,如果你可以upvote并点击旁边的支票,我会很感激。 – iesou 2012-04-09 14:29:09
谢谢你的帮助。还有一个问题。现在它将删除旧的打印机并添加新的打印机,但是如果旧的打印机2不存在于计算机上,它仍然会将新的打印机2添加到系统 – user1011061 2012-04-09 15:36:46