获取CMD命令输出赋值给批处理变量,去除结果末尾多余空格
我之前也踩过这个坑!批处理里直接用set命令赋值命令输出时,很容易带上多余的尾随空格,特别是当命令输出本身有换行或者隐形空格的时候。给你两个实用的解决办法:
方法一:用for /f直接捕获干净的输出
for /f命令天生就会忽略命令输出中的前导和尾随空格,还能自动跳过空行,非常适合用来获取纯净的结果。假设你原本用来获取组名的命令是net localgroup | findstr /C:"Remote Desktop Users",可以改成这样:
@echo off :: 用for /f捕获命令输出,自动去除前后空格 for /f "tokens=*" %%G in ('net localgroup ^| findstr /C:"Remote Desktop Users"') do set "rdpgroup=%%G" :: 现在输出就没有多余空格了 echo "%rdpgroup%"
这里的tokens=*参数是告诉for /f把整行内容(去掉前导空格)赋值给变量%%G,而for /f会自动剔除尾随空格,最终得到的rdpgroup就是不带多余空格的组名。
方法二:手动修剪已有变量的尾随空格
如果已经通过其他方式得到了带尾随空格的变量,也可以用循环来逐个去掉末尾的空格:
@echo off :: 假设这里已经得到了带空格的rdpgroup变量 set "rdpgroup=Remote Desktop Users " :: 循环修剪尾随空格 :TrimTrailing if "%rdpgroup:~-1%"==" " ( set "rdpgroup=%rdpgroup:~0,-1%" goto TrimTrailing ) echo "%rdpgroup%"
这个循环会不断检查变量的最后一个字符,如果是空格就截掉最后一位,直到末尾没有空格为止。
额外小提示
平时给变量赋值时,尽量用set "var=value"这种带引号的写法,这样可以避免不小心在赋值语句末尾加空格导致变量带多余空格的问题(如果写set var=value ,后面的空格会被算进变量值里)。
内容的提问来源于stack exchange,提问作者Aria Fathi
相关产品推荐
相关产品推荐

