中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 使用批处理成批添加打印机(含打印服务器)
作者:
标题: 使用批处理成批添加打印机(含打印服务器) 上一主题 | 下一主题
exzzz
初级用户

游手好闲 + 无所事事 ..



积分 194
发帖 167
注册 2007-4-30
状态 离线
『楼 主』:  使用批处理成批添加打印机(含打印服务器)

目的:
根据打印机配置文件,成批的添加打印机,例如一台电脑同时要安装一个本地的并口打印机,一个网络打印服务器(并非共享其它电脑的打印机,是那种可用一条网线接上交换机的打印机)。

实现步骤:
1、轮询目录下的“打印机X.txt”,根据其中的端口描述判断是否本地LPT端口,如果是LPT本地打印机就不理会,如果是打印服务器,会自动创建新的TCP/IP端口。
2、重启打印服务,使新创建的本地IP端口生效。
3、轮询目录下的“打印机X.txt”,根据其中的打印机名称、驱动位置、打印机型号、打印机端口添加打印服务器。

关键语句:
rundll32 printui.dll,PrintUIEntry /?

缺陷:
因为我这里用不到USB口的本地打印机,以及不使用共享打印机,所以没有添加判断这类打印机的语句。

★★★★★★★★★
下面是批处理的代码
echo off
cls


rem 以下是判断端口
set count=0
:addreginfo
set /a count=%count%+1
if exist 打印机%count%.txt (set filename=打印机%count%.txt) else (goto eof)
for /f "tokens=2 delims==" %%a in ('type %filename% ^|findstr /I "打印机IP="') do set pIP=%%a
if /I "%pIP%"=="LPT1:" goto addreginfo
if /I "%pIP%"=="LPT2:" goto addreginfo


rem 以下是添加端口在注册表中的信息
set regpath1=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_
set regpath2=HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_
:addreg1
@reg add "%regpath1%%pip%" /v "Protocol" /d "00000001" /f /t REG_DWORD >nul 2>nul
@reg add "%regpath1%%pip%" /v "Version" /d "00000001" /f /t REG_DWORD >nul 2>nul
@reg add "%regpath1%%pip%" /v "HostName" /d "" /f >nul 2>nul
@reg add "%regpath1%%pip%" /v "IPAddress" /d "%pip%" /f >nul 2>nul
@reg add "%regpath1%%pip%" /v "HWAddress" /d "" /f >nul 2>nul
@reg add "%regpath1%%pip%" /v "PortNumber" /d "9100" /f /t REG_DWORD >nul 2>nul
@reg add "%regpath1%%pip%" /v "SNMP Community" /d "public" /f >nul 2>nul
@reg add "%regpath1%%pip%" /v "SNMP Enabled" /d "00000000" /f /t REG_DWORD >nul 2>nul
@reg add "%regpath1%%pip%" /v "SNMP Index" /d "00000001" /f /t REG_DWORD >nul 2>nul
:addreg2
@reg add "%regpath2%%pip%" /v "Protocol" /d "00000001" /f /t REG_DWORD >nul 2>nul
@reg add "%regpath2%%pip%" /v "Version" /d "00000001" /f /t REG_DWORD >nul 2>nul
@reg add "%regpath2%%pip%" /v "HostName" /d "" /f >nul 2>nul
@reg add "%regpath2%%pip%" /v "IPAddress" /d "%pip%" /f >nul 2>nul
@reg add "%regpath2%%pip%" /v "HWAddress" /d "" /f >nul 2>nul
@reg add "%regpath2%%pip%" /v "PortNumber" /d "9100" /f /t REG_DWORD >nul 2>nul
@reg add "%regpath2%%pip%" /v "SNMP Community" /d "public" /f >nul 2>nul
@reg add "%regpath2%%pip%" /v "SNMP Enabled" /d "00000000" /f /t REG_DWORD >nul 2>nul
@reg add "%regpath2%%pip%" /v "SNMP Index" /d "00000001" /f /t REG_DWORD >nul 2>nul
goto addreginfo
:eof


rem 以下是重新启动打印服务,使新端口生效
:restartservice
cls
echo.
echo   请稍候,正在启用打印机端口!
echo.
net stop spooler >nul 2>nul
net start spooler >nul 2>nul


rem 以下是添加打印机
set count=0
:instprinter
set /a count=%count%+1
if exist 打印机%count%.txt (set filename=打印机%count%.txt) else (goto over)
cls
for /f "tokens=2 delims==" %%a in ('type %filename% ^|findstr "打印机IP="') do set pIP=%%a
for /f "tokens=2 delims==" %%a in ('type %filename% ^|findstr "打印机名称="') do set pname=%%a
for /f "tokens=2 delims==" %%a in ('type %filename% ^|findstr "打印机型号="') do set pmodel=%%a
for /f "tokens=2 delims==" %%a in ('type %filename% ^|findstr "打印机INF位置="') do set pinf=%%a
echo.
echo 请稍等,正在添加打印机%count%,相关信息如下:
echo.
echo  IP  :%pIP%
echo 名称 :%pname%
echo 型号 :%pmodel%
echo 驱动 :%pinf%
if /I "%pIP%"=="LPT1:" (goto ok)
if /I "%pIP%"=="LPT2:" (goto ok) else (set pip=IP_%pip%)
:ok
rundll32 printui.dll,PrintUIEntry /if /b "%pname%" /f "%pinf%" /r "%pIP%" /m "%pmodel%"
goto instprinter


:over
cls
echo.
echo  打印机添加完毕!
pause
exit
★★★★★★★★★
网络打印服务器配置文件“打印机1.txt”的内容:
打印机IP=44.44.44.44
打印机名称=柯尼卡 220 打印服务器
打印机型号=KONICA MINOLTA 220
打印机INF位置=D:\sysbak\打印机\220驱动\TSK.inf
★★★★★★★★★
本地打印机配置文件“打印机2.txt”的内容:
打印机IP=LPT1:
打印机名称=本地HP 3050
打印机型号=HP LaserJet 3050 Series PCL 5e
打印机INF位置=D:\sysbak\打印机\hp3055\Drivers\2K_XP_Vista\hppcp501.inf
[ Last edited by exzzz on 2008-12-15 at 14:46 ]

附件 1: 添加网络打印机0302.zip (2008-12-15 14:40, 2.09 K,下载次数: 112)
2008-12-15 14:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  

建议把第一行改成@echo off
其它的@全部删除



2008-12-15 14:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
exzzz
初级用户

游手好闲 + 无所事事 ..



积分 194
发帖 167
注册 2007-4-30
状态 离线
『第 3 楼』:  

多谢斑竹关心!

偷了个懒,嘿嘿,@.....那几句,是从我另外一个批处理COPY过来的,懒得替换了。echo off后面我习惯cls,N年前养成的不良习惯,至今改不过来。。。

2008-12-15 14:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
iyuohz
新手上路





积分 4
发帖 3
注册 2006-2-19
状态 离线
『第 4 楼』:  

如果添加USB口的打印机呢?
应该怎么写?

2009-3-18 06:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
exzzz
初级用户

游手好闲 + 无所事事 ..



积分 194
发帖 167
注册 2007-4-30
状态 离线
『第 5 楼』:  

我没有装过USB的,不过你可以先手动装一次,在打印机的端口属性里面看看是什么字符,记得应该是USB01: 之类的样子,把txt文件里面打印机IP 那里修改一下应该就可以了。

而且根据usb设备的特性,应该你随便安装哪个端口都可以,比如网络或者lpt,装完后卸载。之后当你重新启动的时候,就会自动在后台安装好了。



  
2009-3-19 01:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
iyuohz
新手上路





积分 4
发帖 3
注册 2006-2-19
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by exzzz at 2009-3-19 01:40:
我没有装过USB的,不过你可以先手动装一次,在打印机的端口属性里面看看是什么字符,记得应该是USB01: 之类的样子,把txt文件里面打印机IP 那里修改 ...

USB001

不过不能用.

我试过了

安到最后 出现 打印机无法安装

不知道什么原因

貌似"虚拟打印机"也是新端口啊,

usb咋就非得连打印机才行呢?

2009-3-19 09:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zuimeng
初级用户





积分 170
发帖 83
注册 2007-11-30
状态 离线
『第 7 楼』:  

因为USB的端口随机产生的,只有连接了USB打印机才会创建一个USB端口。

2000、xp系统中USB接口的设备都视为即插即用的设备,所以USB打印机不会在列表中特意的事先指定端口。
只有接入打印机后才会视系统中断、端口等问题而随机分配。所以如果你的打印机是USB端口,在你插上打印机并开启打印机电源后,系统就会自动寻找并安装。

2010-6-27 11:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zjf3342
新手上路





积分 1
发帖 1
注册 2010-7-24
状态 离线
『第 8 楼』:  

这个根本没办法实现你们所说的功能,端口也添加不了,更不用说装打印机

2010-7-26 17:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: