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

使用printui.exe时如何正确传递打印机名称参数?

解决批处理脚本中printui.exe无法识别打印机名称的问题

你的问题根源在于wmic printer get name的输出是Unicode格式,当for /f读取这些内容时,会在每个打印机名称末尾残留一个不可见的回车符(\r)。虽然echo %%a看起来显示正常,但这个隐藏的回车符会导致printui.exe无法正确识别打印机名称。

另外你的脚本还有两个小问题:

  • 没有跳过wmic输出的表头"Name",会多处理一次无效内容
  • 打印机名称如果包含空格,直接传%%a给printui.exe会被解析成多个参数,导致出错

下面提供两种可行的修复方案:

方案一:修复wmic输出的残留回车符

通过延迟扩展去除变量末尾的回车符,同时跳过表头、给名称加引号:

@echo off
setlocal enabledelayedexpansion

REM 循环遍历所有打印机名称,跳过表头行
for /f "tokens=* skip=1" %%a in ('wmic printer get name') do (
    REM 去除变量末尾的回车符
    set "printer=%%a"
    set "printer=!printer:~0,-1!"
    
    REM 跳过空行(wmic输出可能存在)
    if "!printer!"=="" goto :continue
    
    REM 判断是否为需要保留的打印机
    echo !printer! | findstr /i "Microsoft OneNote" > nul
    if errorlevel 1 (
        echo 删除打印机: !printer!
        printui.exe /dl /n "!printer!"
    )
    :continue
)
endlocal

方案二:改用PowerShell获取打印机名称(更简洁可靠)

PowerShell的输出没有Unicode残留问题,且语法更直观:

@echo off

for /f "delims=" %%a in ('powershell -Command "Get-Printer | Select-Object -ExpandProperty Name"') do (
    echo %%a | findstr /i "Microsoft OneNote" > nul
    if errorlevel 1 (
        echo 删除打印机: %%a
        printui.exe /dl /n "%%a"
    )
)

两种方案都能解决你遇到的问题,方案二更适合复杂环境下的打印机名称处理。

内容的提问来源于stack exchange,提问作者Frist

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:21:02