You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:52:41