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

批处理脚本中WMIC输出打印机名含多余空格致subinacl执行失败的解决方法

解决WMIC获取打印机名含多余空格导致subinacl执行失败的问题

WMIC默认输出的打印机名称采用固定宽度格式,会自动补空格对齐,这会导致传递给subinacl的打印机名带有多余空格,进而执行失败。以下是两种可靠的修复脚本:

方法1:利用WMIC CSV格式输出避免多余空格

@echo off
setlocal enabledelayedexpansion

:: 遍历所有打印机,通过CSV格式获取无多余空格的名称
for /f "skip=2 tokens=2 delims=," %%a in ('wmic printer get name /format:csv') do (
    :: 去除CSV输出末尾的回车符并修剪前后空格
    set "printerName=%%a"
    set "printerName=!printerName:~0,-1!"
    for /f "tokens=*" %%b in ("!printerName!") do set "printerName=%%b"
    
    :: 执行subinacl权限添加命令
    subinacl /printer "!printerName!" /grant=Everyone=F
)

endlocal

方法2:直接处理WMIC默认输出的空格

@echo off
setlocal enabledelayedexpansion

:: 遍历WMIC输出的打印机名,跳过表头行
for /f "skip=1 tokens=*" %%a in ('wmic printer get name') do (
    set "printerName=%%a"
    :: 跳过空行,避免无效执行
    if not "!printerName!"=="" (
        :: 自动去除字符串前后所有空格
        for /f "tokens=*" %%b in ("!printerName!") do set "printerName=%%b"
        :: 应用权限配置
        subinacl /printer "!printerName!" /grant=Everyone=F
    )
)

endlocal

核心要点

  • 启用enabledelayedexpansion是为了在循环内实时更新和读取变量值
  • for /f "tokens=*"会自动去除字符串首尾的所有空格,是批处理中修剪空格的高效方法
  • CSV格式输出规避了WMIC固定宽度补空格的问题,适合需要精确提取字段的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:48:12