各类“一键安装打印机”博文及帖子的观后感
这篇 (https://blog.csdn.net/fantasy7728/article/details/127571300) 在我浏览过的文章里算代码简单说明详细的了。然后就是 [脚本之家-Windows系统自动连接网络共享打印机BAT脚本分享](https://www.jb51.net/article/59074.htm) 符合我的胃口,代码简单易懂,这也方便易用与调错。
这篇来说 [【其他转载】利用批处理脚本自动添加网络打印机(TCP/IP) (出处: 吾爱破解论坛)](https://www.52pojie.cn/thread-1775770-1-1.html) 。对于我个人来说帖子里的代码并不是那么易懂易用;就注册表部分来说,老实说查看 (https://admx.help/) 和 (https://learn.microsoft.com/zh-cn/windows/win32/apiindex/windows-api-list) 去了解的话,挺繁琐和头大的。
综上,看了这些关于一键安装打印机的博客,我个人感觉没必要搞复杂(特殊需求外),代码还可以再简单点,这方面简单的实例,其实更适用于大多数人。
在不安装打印驱动的情况下,是无法完成双面打印的。如图对比
通用型,即不安装厂家驱动。核心缺陷:不能双面打印
![](https://s2.xptou.com/2023/04/20/6440f1d149e8f.png)
安装驱动后
![](https://s2.xptou.com/2023/04/20/6440f1dacea29.png)
借助脚本之家的例子(其他参考:(https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/rundll32-printui)),简单改写了一下,连接网络打印机测试源码
**注:安装惠普打印机驱动之后,简单删除打印机,再进行的特例测试(非完全初始化环境)**
```
@echo off
set printerIP=192.168.0.252
echo 检查网络打印机 %printerIP% 是否在线...
ping -n 1 %printerIP% > nul
if %errorlevel% neq 0 (
echo 不在线 %printerIP% 稍后试
pause
exit
)
rem 连接网络打印机 通用
@rem rundll32 printui.dll,PrintUIEntry /if /b ""/r "IP_%printerIP%" /m "Generic / Text Only"
@REM 已安装惠普打印机驱动,特例测试
rundll32 printui.dll,PrintUIEntry /if /b ""/r "IP_%printerIP%" /m "HP Universal Printing PCL 6"
echo 连接网络打印机,已OK
pause
```
效果图
![ ](https://s2.xptou.com/2023/04/20/6440f1e3cac95.png)
**下一贴或考虑共享打印机的尝试(非常规顺序编码),如果软件程序不支持静默安装等的话,待测... ** 针对打印驱动的完全卸载
参考:
* 如上的脚本之家(cmd)
* [知乎专栏-如何彻底卸载或删除打印机驱动](https://zhuanlan.zhihu.com/p/589864641)
* [百度经验-解决无法删除,指定打印机驱动程序当前正在使用](https://jingyan.baidu.com/article/8065f87f35c1e763312498d3.html)
![](https://s2.xptou.com/2023/04/20/6440fc3eeef5b.png) 本帖最后由 qgw123 于 2023-4-20 17:36 编辑
豫A00001 发表于 2023-4-20 15:57
楼主第二个链接我在win11环境下使用总是报错
我也经常bat连接共享打印机user:后面是用户名 空格 密码 去掉引号试试看
net use \\192.168.10.131\IPC$ "passwd" /user:"guest"
改成net use \\192.168.10.131/user:用户名 密码
全文如下
@echo off
rem 建立链接
net use \\192.168.10.131/user:用户名 密码
rem 打开共享文件夹
explorer \\192.168.10.131\ 本帖最后由 hoochanlon 于 2023-4-20 23:20 编辑
目前测试惠普打印机驱动不支持静默安装,方案有三个:
* autolt (我写了autolt脚本,那还得其他主机有环境才行,又会显得麻烦)
* 备份还原法 ,注入的方式安装打印驱动(参考(https://blog.hakuren.ml/2020/09/25/%E6%89%B9%E5%A4%84%E7%90%86%E4%B8%80%E9%94%AE%E5%AE%89%E8%A3%85%E6%89%93%E5%8D%B0%E6%9C%BA%E9%A9%B1%E5%8A%A8/))
* 其他第三方制作包 (一、非官方不推荐;二、整体的打印环境都各不相同)
先找找资料看看,下一贴或试试共享式的打印机批处理安装测试。
6.18pm 补充资料(待看):
*批处理脚本 - 打印 - IT宝库 (itbaoku.cn)
*【bat】做个一键连接网络打印机的bat_bat连接共享打印机_laoxige的博客-CSDN博客
*在 Windows 中如何在无用户交互的情况下添加打印机 - Microsoft 支持
*[已解决]bat文件怎样自动安装打印机? - BAT求助&讨论 - 批处理之家 BAT,CMD,批处理,PowerShell,VBS,DOS - Powered by Discuz! (bathome.net)
* Win10 64位安装惠普Laserjet M1005 MFP驱动攻略 - 知乎 (zhihu.com)
7.31pm 补充资料 (可行性测试)
* DISM 驱动程序维护 (.inf) 命令行选项 | Microsoft Learn
* 命令行备份Windows 10驱动&设备管理器中安装驱动。 - 知乎 (zhihu.com)
* 已安装的打印机驱动怎么提取-ZOL问答
### 试错与找规律
这次在琢磨如何静默安装打印机驱动,编码验证自己思路是否可行上,耗了不少时间。先说试错点,参考了(https://ask.zol.com.cn/x/4653969.html),在 “打印管理” 也有个导出驱动的,设置比较繁琐,反正我导入完是一直有异常的。保险起见,这方案PASS(本身也没成功...)。
先说 (https://blog.hakuren.ml/2020/09/25/批处理一键安装打印机驱动/) 的主要两步思路吧,本质上是一次备份还原:
1. 定位到打印机的IP注册信息,导出:`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\`
2. 通过 dism 导出驱动 ,再定位到打印机驱动程序 `dism /online /export-driver /destination:D:\backup`
导出容易,但驱动定位很难。因为每个人所在的环境,打印驱动名是不一样的,各牌子的都有,尤其是导出来的驱动文件夹名称都很长,这就极大增加了打印机驱动精准定位的难度,在删除驱动程序包的错误上,我发现到了规律 (注意这四幅图的规律性)。
![](https://s2.xptou.com/2023/04/20/64414f9c8e0ea.png)
![](https://s2.xptou.com/2023/04/20/64414fcc5b2b4.png)
![](https://s2.xptou.com/2023/04/20/6441501ccc02a.png)
![](https://s2.xptou.com/2023/04/20/6441503922539.png)
所以就在`rundll32 printui.dll,PrintUIEntry`精准定位,并补上`/f F: \backup\hpcu215u\hpcu215u.inf` ,圆满完成了两台不同主机安装惠普打印机驱动的测试过程。
### 两台Windows主机测试效果
测试机一
![](https://s2.xptou.com/2023/04/20/6441545d68e98.png)
测试机二,打印效果正常
![](https://s2.xptou.com/2023/04/20/644155a2718f6.png)
![](https://s2.xptou.com/2023/04/20/64415610db44e.png)
![](https://s2.xptou.com/2023/04/20/6441562cb5faf.png)
![](https://s2.xptou.com/2023/04/20/64413a4d643d1.png) 本帖最后由 hoochanlon 于 2023-4-21 09:16 编辑
附源码,批处理一键安装网络打印机,圆满结束
https://github.com/hoochanlon/ihs-simple/blob/main/d-bat/install_public_network_hp_printer_driver.bat
```
@echo off
set printerIP=192.168.0.252
echo 检查网络打印机 %printerIP% 是否在线...
ping -n 1 %printerIP% > nul
if %errorlevel% neq 0 (
echo 不在线 %printerIP% 稍后试
pause
exit
)
rem 连接网络打印机 通用
@REM rundll32 printui.dll,PrintUIEntry /if /b ""/r "IP_%printerIP%" /m "Generic / Text Only"
@REM 已安装惠普打印机驱动,特例测试
@REM rundll32 printui.dll,PrintUIEntry /if /b ""/r "IP_%printerIP%" /m "HP Universal Printing PCL 6"
:: ---------------- 静默安装打印机驱动 -------------------------
@REM 详情见:各类“一键安装打印机”博文及帖子的观后感 https://www.52pojie.cn/thread-1776328-1-1.html
@REM 由于惠普打印机驱动不支持静默安装,所以使用备份还原方式拟态静默安装。两个步骤
@REM 1. 导出注册表
@REM reg export "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_192.168.0.252" "C:\Users\nice\Documents\IP_192.168.0.252.reg"
@REM 2. 使用dism,导出驱动,再利用服务器卸载失败的效果,去定位到具体打印机型号驱动
@REM dism /online /export-driver /destination:F:\backup\
@REM 静默模式导入注册表
regedit /s C:\Users\nice\Documents\IP_192.168.0.252.reg
@REM 保险稳妥的用法,不初始化一下也挺容易造成执行失败。
@REM 有时打印机删不掉一些文件也可以用这命令
net stop spooler
net start spooler
@REM rundll32:运行 Windows DLL 文件。
@REM printui.dll:Windows 的打印机用户界面组件 DLL 文件。
@REM PrintUIEntry:打印机用户界面入口点。
@REM /if:安装新的打印机。
@REM /b "":设置打印机名称为空字符串,使其在安装后由用户进行命名。
@REM /f F:\backup\hpcu215u\hpcu215u.inf:指定打印机驱动程序包的位置和 .inf 文件名称。
@REM /r "IP_%printerIP%":设置打印机端口为 IP 地址端口,并使用 %printerIP% 变量指定 IP 地址。这个变量需要在其他地方定义,通常是通过批处理脚本进行传递。
@REM /m "HP Universal Printing PCL 6":指定要安装的打印机驱动程序的名称。
@REM 安装打印机
rundll32 printui.dll,PrintUIEntry /if /b "" /f F:\backup\hpcu215u\hpcu215u.inf /r "IP_%printerIP%" /m "HP Universal Printing PCL 6"
echo 连接网络打印机,已OK
pause
``` 大佬分享的太高端了,我这边有个小技巧,手动链接打印机的时候,把ip地址换成主机电脑的名字,以后就算ip地址改变也不会影响到打印机的使用 ### 分割线
上篇,批处理一键安装网络打印机已结束。共享打印机的脚本正式开撸 a1149741006 发表于 2023-4-21 11:33
各大打印机可以一键安装嘛
你按我的分析,可以说的上是教程了,跟着步骤走,自己配就可以,因为每个品牌对应的是不一样的。逻辑原理我在上贴写得很清楚了。(注意,这是网络打印机)
下一贴我发的就是另外的共享打印机了 本帖最后由 hoochanlon 于 2023-4-21 11:46 编辑
测试还算ok,下午再贴个源码
![](https://s2.xptou.com/2023/04/21/64420715dd132.png)
使用 `/Y` 我都一直没看到标记绿勾,批处命令以及UI界面配合度上还是有些小bug的,如下图
https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/rundll32-printui
![](https://s2.xptou.com/2023/04/21/64420ebb5ed45.png) qgw123 发表于 2023-4-20 17:23
我也经常bat连接共享打印机user:后面是用户名 空格 密码 去掉引号试试看
net use \\192.168.10.131\ ...
就其他楼层就有关于共享打印机的回答。 本帖最后由 hoochanlon 于 2023-4-21 13:28 编辑
附源码: https://github.com/hoochanlon/ihs-simple/blob/main/d-bat/install_share_hp_printer.bat
**注:该部分为共享打印机,网络打印机在分割线的上贴。**
```
@echo off
echo\
@REM 设置成共享打印机主机名
set printerHost=xx1688
echo%printerHost%测试连接中...
rem 使用ping命令检查打印机是否在线
ping -n 1 %printerHost% > nul
if %errorlevel% neq 0 (
echo不在线 %printerHost% 稍后试
pause
exit
)
@REM net stop spooler & net start spooler
echo\
echo 正在与 %printerHost% 共享打印主机建立连接
@REM 用户名abc 密码123456 /persistent:yes 永久保存
net use \\%printerHost% /user:abc 123456 /persistent:yes
echo\
echo 正在连接打印机,并安装驱动
@REM/in 参数表示安装打印机驱动程序,/n 参数指定打印机名称,
@REM /z 参数表示将打印机设置为默认打印机,/q 参数表示安静模式执行
rundll32 printui.dll,PrintUIEntry /y /in /n "\\%printerHost%\HP LaserJet MFP M232-M237 PCLmS" /q
@REM color 0a
@REM timeout /t 30
@REM color
echo\
pause
``` 本帖最后由 hoochanlon 于 2023-4-20 23:24 编辑
以Mac自带的测试PDF做打印测试页(Windows环境运行),随后补充说明。
`open /System/Library/Image\ Capture/Devices/VirtualScanner.app/Contents/Resources/numbers.pdf`
最后一周了,花了小半天时间搞定网络打印机的问题,明天就试一下共享打印机。
楼主分析的好。谢谢 赶上直播了{:301_978:} 我感觉还是手动共享快捷简单。 楼主第二个链接我在win11环境下使用总是报错https://imgloc.com/i/iG8beVhttps://imgloc.com/i/iG8OHN 我写了一个一键安装驱动的,不是共享,谁要 收藏了,以后安装打印机就省事了,不然网络打印机他要查找好久才行 “一键安装打印机”