批处理脚本中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
相关产品推荐
相关产品推荐

