如何用Batch脚本通过IP地址定位打印服务器中打印机的完整路径
打印机IP定位打印服务器完整路径的Batch脚本解决方案
作为服务台工作人员,因无法熟练使用PowerShell,需编写Batch脚本实现自动化流程——通过打印机IP地址在多个打印服务器中定位其完整路径(格式如\\print_server\printer_name),替代手动遍历打印服务器、按描述(含打印机IP)排序查找的方案。
现有脚本已能从远程计算机注册表获取网络打印机IP,但卡在遍历打印服务器、匹配IP并获取完整路径的环节,以下是解决方案:
核心思路
使用wmic命令直接查询远程打印服务器的打印机属性,提取端口(IP)和打印机名称,匹配目标IP后输出完整路径。wmic无需依赖DNS或dir命令,能直接访问打印服务器的打印机配置。
完整脚本实现
@echo off setlocal enabledelayedexpansion :: 1. 获取目标打印机IP(可替换为用户输入或从已有逻辑获取) set /p target_ip=Enter target printer IP address: echo Searching for printer with IP %target_ip%... :: 2. 定义需要遍历的打印服务器列表 set "svrs=\\pr1 \\pr2 \\pr3" :: 3. 遍历每个打印服务器 for %%s in (%svrs%) do ( echo Checking server %%s... :: 使用wmic查询该服务器上所有打印机的端口和名称 for /f "skip=1 tokens=2,3 delims=," %%a in ('wmic /node:"%%~s" printer get PortName^,Name /format:csv 2^>nul') do ( :: 清理wmic输出的多余空格(wmic输出会带尾部空格) set "port=%%a" set "port=!port: =!" set "printer_name=%%b" set "printer_name=!printer_name: =!" :: 匹配目标IP if "!port!"=="%target_ip%" ( echo Found match: !port! ^> %%s\!printer_name! goto :end_search ) ) ) echo No printer found with IP %target_ip% in specified servers. :end_search pause
代码关键说明
- 打印服务器遍历:通过
for %%s in (%svrs%)循环处理每个服务器,%%~s用于自动去除路径引号(如果存在)。 - wmic查询优化:
wmic /node:"%%~s" printer get PortName,Name /format:csv以CSV格式输出打印机端口和名称,skip=1跳过表头行,tokens=2,3 delims=,精准提取所需字段。 - 空格清理:wmic的CSV输出自带尾部空格,通过
set "var=!var: =!"去除多余空格,避免因空格导致的匹配失败。 - 快速终止逻辑:匹配成功后通过
goto :end_search提前结束搜索,提升效率。
替代方案(wmic不可用时)
若环境中无法使用wmic,可通过查询打印服务器注册表实现(需管理员权限):
@echo off setlocal enabledelayedexpansion set /p target_ip=Enter target printer IP address: set "svrs=\\pr1 \\pr2 \\pr3" for %%s in (%svrs%) do ( echo Checking server %%s... :: 查询打印机注册表路径 for /f "tokens=*" %%i in ('reg query "%%s\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers" 2^>nul') do ( :: 获取Port值 for /f "tokens=2*" %%a in ('reg query "%%s\%%i" /v Port 2^>nul') do ( set "port=%%b" set "port=!port: =!" :: 匹配IP if "!port!"=="%target_ip%" ( :: 提取打印机名称(注册表项名称) for %%n in ("%%i") do set "printer_name=%%~nxn" echo Found match: !port! ^> %%s\!printer_name! goto :end_search ) ) ) ) echo No printer found with IP %target_ip% in specified servers. :end_search pause
内容的提问来源于stack exchange,提问作者echo_print
相关产品推荐
相关产品推荐

