吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3701|回复: 37
收起左侧

[其他转载] 利用批处理脚本自动添加网络打印机(TCP/IP)

   关闭 [复制链接]
c26411 发表于 2023-4-19 10:40
本帖最后由 c26411 于 2023-4-19 11:30 编辑

一般情况下,安装TCP/IP端口的打印机都需要两个步骤,先添加TCP/IP端口,再安装驱动程序,既然要实现批量自动部署,就肯定离不开脚本,然而Windows都给予了完美的支持。
  • 用途:绝大部分普通用户都不会连接打印机,更不会安装驱动,如果是共享打印机相对比较简单,基于TCP/IP端口的网络打印机多数人不会操作,建立一个脚本并使其自动安装就能减少大量的重复工作,尤其是人员变动比较频繁的公司。
  • 优点:使用者无需繁琐的操作,只需双击bat脚本即可实现自动安装。
  • 缺点:前期调试需要具备一定的bat、电脑操作知识。
根据网上的资料,大多都是在bat里导入注册表文件实现端口添加,且更换打印机需要修改多处IP地址此脚本在bat头部设置变量,后面的脚本纯变量调用,更换打印机、IP只需修改头部变量即可,
且添加端口无需reg文件,可以自动识别操作系统,从而根据不同的操作系统采用不同的驱动文件。

复制下面脚本粘贴到新建文本文档中,并保存为bat格式(编码为ANSI-否则可能乱码)。修改参数默认情况下,需要修改第 39 ~ 42 行

  • 如区分操作系统,请以下图所示存放(当然你也可以修改第25、26行内容自行更改存放路径格式),也可以在41行中删除变量“%system_info%”不根据系统版本选择驱动,所有系统使用同一驱动;
  • 脚本中第41行使用的是相对路径(不懂的自行百度相对路径与绝对路径),这里是最容易出错的;
  • 第41行中,变量结尾需以 .inf 结尾,不要直接指定文件夹,具体可以根据“关于变量“驱动名称”的说明”判断是否正确选择文件。



image.png

关于变量“驱动名称”的说明
在脚本第44行需要修改驱动名称,可以在“设备和打印机”中任意打印机“打印机属性”面板中的“高级”选项卡中,点击“新驱动程序”后,选择需要使用的驱动描述文件(.inf),
Windows 即可识别改驱动文件所包含的驱动,如下图中,“驱动名称”变量值应改为“RICOH MP 2554 PCL 6
image.png


[Shell] 纯文本查看 复制代码
@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 打印机自动安装程序 

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.          打印机自动安装程序 
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 
exit

免费评分

参与人数 6吾爱币 +6 热心值 +6 收起 理由
a22488 + 1 + 1 我很赞同!
木木小白 + 1 + 1 我很赞同!
iNIC + 1 + 1 谢谢@Thanks!
blindcat + 1 + 1 谢谢@Thanks!
blywq + 1 + 1 谢谢@Thanks!
tydx0259 + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

loopvar 发表于 2023-4-20 11:26
方法是好方法,但是直接驱动安装也没麻烦许多,而且打印机一般还带有扫描功能,不如直接驱动安装了。
CitizenScyu 发表于 2023-4-19 10:45
花葬 发表于 2023-4-19 10:49
每次都要调试吗 要是每次新机器  新电脑都要调试,那还不如直接装驱动了
豫A00001 发表于 2023-4-19 11:00
怎么指定打印机ip和驱动位置
apull 发表于 2023-4-19 11:01
这个厉害了。
豫A00001 发表于 2023-4-19 11:02
https://imgloc.com/i/i6oMLb
执行了乱码了
1681873323259.jpg
ColaHyn666 发表于 2023-4-19 11:02
这个是实纸打印还是虚拟打印机呀?
cick 发表于 2023-4-19 11:02
不知道,感觉这个是我的问题么,我都`ping`不通,最好是转换`ANSI`保存不然乱码
1.png
atone 发表于 2023-4-19 11:16
牛逼啊,666,大哥威武!!!
tydx0259 发表于 2023-4-19 11:21
谢谢楼主,辛苦了,
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-27 19:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表