一般情况下,安装TCP/IP端口的打印机都需要两个步骤,先添加TCP/IP端口,再安装驱动程序,既然要实现批量自动部署,就肯定离不开脚本,然而Windows都给予了完美的支持。
- 用途:绝大部分普通用户都不会连接打印机,更不会安装驱动,如果是共享打印机相对比较简单,基于TCP/IP端口的网络打印机多数人不会操作,建立一个脚本并使其自动安装就能减少大量的重复工作,尤其是人员变动比较频繁的公司。
- 优点:使用者无需繁琐的操作,只需双击bat脚本即可实现自动安装。
- 缺点:前期调试需要具备一定的bat、电脑操作知识。
根据网上的资料,大多都是在bat里导入注册表文件实现端口添加,且更换打印机需要修改多处IP地址,于是我将脚本优化了一下,在bat头部设置变量,后面的脚本纯变量调用,更换打印机、IP只需修改头部变量即可,且添加端口无需reg文件,可以自动识别操作系统,从而根据不同的操作系统采用不同的驱动文件。
创建脚本
@echo off MODE con: COLS=20 LINES=20 rem 自动提权以管理员方式运行 >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" if '%errorlevel%' EQU '5' ( goto UACPrompt ) else ( goto gotAdmin ) :UACPrompt echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs" "%temp%\getadmin.vbs" exit /B :gotAdmin if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" ) pushd "%CD%" CD /D "%~dp0" @echo off setlocal MODE con: COLS=100 LINES=28 title 打印机自动安装程序 by:COAadmin Blog:www.zifumao.com set TheBit=%PROCESSOR_ARCHITECTURE:~-2% if /i not "%os%"=="Windows_NT" (set TheOS=非Windows系统&set TheBit=) else ( ver | find "5.1" > nul && set system_info=WinXP.%TheBit% ver | find "6.1" > nul && set system_info=Win7.%TheBit% ver | find "6.2" > nul && set system_info=Win8.%TheBit% ver | find "10.0"> nul && set system_info=Win10.%TheBit% ) rem Tips:根据自身情况修改第41 - 44行等于号后面的内容 rem rem 变量说明: rem rem 打印机名称:print_name //在 “设备和打印机” 界面中显示的名称 rem 打印机IP:print_IP //打印机IP地址,仅适用于TCP/IP端口 rem 驱动文件路径:print_drive_dir //驱动文件相对路径,%~dp0表示当前运行路径,如驱动不区分操作系统则删除 “ %system_info% ” 并修改为驱动子目录,如 %~dp0Drive\drive.inf rem 驱动名称:print_drive_name //inf文件中可能包含多个型号的打印机驱动,该名称用于匹配驱动名称,可在打印机 “属性” 中的 “高级” 中点击 “新驱动程序” 查看 rem set print_name=理光 MP C2003 set print_IP=192.168.0.10 set print_drive_dir=%~dp0%system_info%\oemsetup.inf set print_drive_name=RICOH MP C2003 PCL 6 echo. echo. 打印机自动安装程序 by:COAadmin Blog:www.zifumao.com echo. echo. ========================================================================= echo. echo. 操作系统 : %system_info% echo. echo. 打印机名 : %print_name% echo. echo. 打印机IP : %print_IP% echo. echo. 驱动路径 : %print_drive_dir% echo. echo. 驱动名称 : %print_drive_name% echo. echo. ========================================================================= echo. echo. 准备安装 %print_name% 打印机 echo. echo. 如果360安全卫士拦截了,允许运行 echo. echo. 如果运行本程序出现异常或者程序运行后未能安装打印机,请联系管理员! echo. echo. echo. echo. ★ ★ ★ 按任意键开始安装打印机 ★ ★ ★ echo. pause>nul :check rem 检查驱动目录是否存在 if not exist %print_drive_dir% goto no_drive :add_port echo. echo. 正在添加打印机端口 reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "Protocol" /t REG_DWORD /d 0x1 /f>nul reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "Version" /t REG_DWORD /d 0x2 /f>nul reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "HostName" /t REG_SZ /d "%print_IP%" /f>nul reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "IPAddress" /t REG_SZ /d "" /f>nul reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "HWAddress" /t REG_SZ /d "" /f>nul reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "PortNumber" /t REG_DWORD /d 0x238c /f>nul reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "SNMP Community" /t REG_SZ /d "public" /f>nul reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "SNMP Enabled" /t REG_DWORD /d 0x1 /f>nul reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "SNMP Index" /t REG_DWORD /d 0x1 /f>nul reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "PortMonMibPortIndex" /t REG_DWORD /d 0x1 /f>nul reg add "HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "Protocol" /t REG_DWORD /d 0x1 /f>nul reg add "HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "Version" /t REG_DWORD /d 0x2 /f>nul reg add "HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "HostName" /t REG_SZ /d "%print_IP%" /f>nul reg add "HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "IPAddress" /t REG_SZ /d "" /f>nul reg add "HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "HWAddress" /t REG_SZ /d "" /f>nul reg add "HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "PortNumber" /t REG_DWORD /d 0x238c /f>nul reg add "HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "SNMP Community" /t REG_SZ /d "public" /f>nul reg add "HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "SNMP Enabled" /t REG_DWORD /d 0x1 /f>nul reg add "HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "SNMP Index" /t REG_DWORD /d 0x1 /f>nul reg add "HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Standard TCP/IP Port\Ports\%print_IP%" /v "PortMonMibPortIndex" /t REG_DWORD /d 0x1 /f>nul echo. echo. 正在重启打印服务,请稍等…… echo. rem 必须重启打印服务才能成功添加端口 net stop spooler>nul net start spooler>nul if errorlevel 0 echo. 打印服务重启成功 echo. .............................................. rem 检查是否存在同名打印机,如存在则删除再添加 rem 如无需删除同名打印机,请删除或注释下面4行内容 set isInstalled=0 for /f "skip=2" %%i in ('wmic printer where "Name='%print_name%'" get Name') do (set isInstalled=1) if %isInstalled%==1 (rundll32 printui.dll,PrintUIEntry /dl /n "%print_name%") :install REM # /b 参数用于指定安装的打印机名称。 REM # /f 参数用于指定打印机的驱动文件。 REM # /r 具体的端口名称可以通过 打印机属性-->端口 那边去查看。 REM # /m 参数用于指定打印驱动程序的名称。 rundll32 printui.dll,PrintUIEntry /if /b "%print_name%" /f "%print_drive_dir%" /r "%print_IP%" /m "%print_drive_name%" /z if errorlevel 0 ( echo. echo. 打印机安装成功! echo. echo. =========================================================== echo. goto end )else if( echo. echo. 打印机安装失败! echo. echo. =========================================================== goto end ) echo. echo. rem 安装好打印机后,也可以在批处理文件最后加一行命令,把这个打印机设置为默认。 echo. rem echo 将这个打印机设置为默认打印机 rem rundll32 printui.dll,PrintUIEntry /y /n %print_name% goto end REM #********************************************************************************* REM # REM # /ia 用 inf 文件安装打印机驱动程序 REM # /if 用 inf 文件安装打印机 REM # /b[name] 基本打印机名 REM # /c[name] 如果操作在远程机器上,unc 机器名 REM # /dl 删除本地打印机 REM # /dn 删除网络打印机连接 REM # /dd 删除打印机驱动程序 REM # /f[file] inf 文件或输出文件 REM # /h[arch] 驱动程序体系结构,为下列之一: Alpha | Intel | IA64 REM # /m[model] 打印机驱动程序型号名 REM # /n[name] 打印机名 REM # /v[version] 驱动程序版本属于下列中的一个: Windows 95、98 和 ME | Windows NT 4.0 | Windows NT 4.0 或 2000 | Windows 2000 或 XP| Windows XP REM # /q 安静模式,不显示错误信息 REM # /r[port] 端口名 REM # /y 将打印机设为默认打印机 REM # /z 不要自动共享这台打印机 REM # /Z 共享这台打印机,只能跟 /if 选项一起使用 REM #其中/m参数后面的打印机驱动程序型号名为inf文件中用于指明驱动的打印机名称,一般在使用向导安装的时候在选定inf文件后出来的所有驱动名称中你自己需要的那个。 REM # REM # 更多的帮助请使用rundll32 printui.dll,PrintUIEntry /? REM # REM #********************************************************************************* :no_drive rem 没有驱动文件 echo. echo. 驱动文件不存在或操作系统不支持,程序即将退出... echo. :end rem 即将退出程序 echo. echo. 5秒后自动退出... echo. ping -n 5 127.0.0.1>nul start https://www.zifumao.com/3692.html exit
复制以上脚本粘贴到新建文本文档中,并保存为bat格式(编码为ANSI)。
修改参数
默认情况下,需要修改第 39 ~ 42 行内容。
-
- 如区分操作系统,请以下图所示存放(当然你也可以修改第25、26行内容自行更改存放路径格式),也可以在41行中删除变量“%system_info%”不根据系统版本选择驱动,所有系统使用同一驱动;
- 脚本中第41行使用的是相对路径(不懂的自行百度相对路径与绝对路径),这里是最容易出错的;
- 第41行中,变量结尾需以 .inf 结尾,不要直接指定文件夹,具体可以根据“关于变量“驱动名称”的说明”判断是否正确选择文件。
注意:Windows 10 与 Windows 11 驱动基本通用。
开始使用
完成以上修改后,双击运行bat脚本即可开始安装
关于变量“驱动名称”的说明
在脚本第44行需要修改驱动名称,可以在“设备和打印机”中任意打印机“打印机属性”面板中的“高级”选项卡中,点击“新驱动程序”后,选择需要使用的驱动描述文件(.inf),Windows 即可识别改驱动文件所包含的驱动,如下图中,“驱动名称”变量值应改为“RICOH MP 2554 PCL 6”
2023/04/14:关于备份/恢复打印机设置
该文章发布后,网友@安静 咨询如何实现添加打印机后默认彩色/黑白打印,当时由于事情较多,大概翻阅了一下也没有找到相关的参数可以指定彩色/黑白打印,后来在闲暇至于看到rundll32 printui.dll,PrintUIEntry还可以备份/恢复打印机配置突发奇想(刚好我也有这种需求),经过实测,在配置好的电脑上备份打印机配置后是完全可以实现该功能的,有些公司使用打印机需要认证(例如理光Aficio MP 2852添加认证后需要在详细信息中填写ID)才能打印等特殊需求应该也是可以的,我就不一一测试了。
值得一提的是,我是在Windows 10 Pro 2004中测试,打印机恢复配置文件时若打印机处于“未指定”状态时,是无法恢复配置的,而且这个这个状态的时长根据本身环境会有所变化,不好判断当前状态,所以我就单独写了一个bat脚本来备份/恢复配置文件。
@echo off MODE con: COLS=90 LINES=28 rem 自动提权以管理员方式运行 >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" if '%errorlevel%' EQU '5' ( goto UACPrompt ) else ( goto gotAdmin ) :UACPrompt echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs" "%temp%\getadmin.vbs" exit /B :gotAdmin if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" ) pushd "%CD%" CD /D "%~dp0" @echo off MODE con: COLS=90 LINES=28 title 打印机配置备份/恢复工具 rem 变量说明: rem rem 打印机名称:print_name rem 备份路径:print_settings set print_name=2楼 C2003 set print_settings=%~dp0Print_Setting.dat :start cls echo. echo. echo. =========================================================== echo. echo. 打印机名 : %print_name% echo. echo. 备份路径 : %print_settings% echo. echo. echo. =========================================================== echo. echo. 准备备份/恢复%print_name% 打印机配置文件 echo. echo. 如果360安全卫士拦截了,允许运行 echo. echo. 如果运行本程序出现异常或者程序运行后未能安装打印机,请联系管理员 echo. echo. 1、备份打印机配置到文件 echo. echo. 2、从文件恢复打印机配置 echo. set /p var=请选择: if %var%==1 goto backup if %var%==2 goto recovery goto start :backup rundll32 printui.dll,PrintUIEntry /Ss /n "%print_name%" /a "%~dp0Print_Setting.dat" goto end :recovery rundll32 printui.dll,PrintUIEntry /Sr /n "%print_name%" /a "%~dp0%print_name%_Setting.dat" :end rem 即将退出程序 echo. echo. 5秒后自动退出... ping -n 5 127.0.0.1>nul echo. exit
HARRY
广东脚本添加好像添加不了LPR协议的打印机
字符猫
四川@HARRY 目前该脚本仅在Raw协议上测试,LPR协议的打印机没有测试过诶
HARRY
广东@字符猫 最近为了这事在头痛 ,请问有没有什么资料可以再共享一步……
字符猫
四川@HARRY 目前暂时没有,可以看看rundll32 printui.dll,PrintUIEntry /?的说明
HARRY
广东@字符猫 感谢!我再研究一下看看
魔理沙
湖南小年快乐喵
字符猫
四川@魔理沙 同乐同乐
魔理沙
未知圣诞快乐啊朋友
字符猫
上海@魔理沙 圣诞快乐
竹咂w
上海为什么我试了一下,系统找不到指定目录,是什么情况,麻烦请告知一下
字符猫
上海@竹咂w 已QQ联系解决
花瑜
广东重启打印服务是否增加个 /yes?或者去掉nul, 不然系统提示看不见也不能确定
字符猫
上海@花瑜 把第111、112行后面的“>nul”去掉就可以看到系统提示了
語凛冬将至
上海域环境下面没有管理员怎么设置哦。能弄一下不大神
字符猫
上海@語凛冬将至 我这边没有域环境呢,对域控这块也不是很了解
小玄玄
上海@字符猫 域环境下找公司IT 索取主机安装时候预留的管理员账号密码,或者输入域环境的管理员账号密码咯
字符猫
上海@小玄玄 对哦,域控环境下是控制的执行bat文件还是控制网络访问还得看实际情况,但是不管如何都是需要找IT部门要账号密码
打不死的强丿
陕西下一篇写
Loki
广东要取消 双向支持 呢
字符猫
上海@Loki 通过rundll32 printui.dll,PrintUIEntry /?查看帮助时没有看到相关参数,不过应该可以通过修改注册表实现的
魔理沙
湖南突然诈尸
字符猫
上海@魔理沙 确实很久没有更新了
打不死的强丿
陕西是牛的哇