如何移除批处理脚本输出中SU650后的多余尾随空格?
如何移除批处理脚本输出中SU650后的多余尾随空格?
你好,你的方法确实成功解决了SU650行的多余空格问题,但确实存在更通用、简洁的处理方式——不用针对特定字符串写分支逻辑,而是直接统一处理所有行的尾随空格,这样不管哪个启动条目后面带多余空格,都能自动清理,代码也更易维护。
给你推荐两种更优的方案:
方案一:通用尾随空格清理(保留开头空格,仅去结尾)
这个方法会循环检查并删除变量的最后一个字符,直到最后一个字符不是空格为止,完全保留原字符串的开头和中间格式:
@echo off setlocal EnableDelayedExpansion set Sys32=%SystemRoot%\System32 set "fwdes=%Sys32%\bcdedit.exe /enum firmware | %Sys32%\findstr.exe "description"" for /f "usebackq Tokens=1*" %%a in (`%fwdes%`) do ( set "bootEntry=%%b" :: 循环移除尾随空格 :trimTrailing if "!bootEntry:~-1!"==" " ( set "bootEntry=!bootEntry:~0,-1!" goto trimTrailing ) echo [!bootEntry!] ) pause
代码说明:
set "bootEntry=%%b":把bcdedit返回的启动条目描述赋值给变量!bootEntry:~-1!:取变量的最后一个字符,判断是否为空格!bootEntry:~0,-1!:截断变量的最后一个字符(也就是删掉那个多余的空格)- 循环执行直到变量末尾没有空格为止,最后输出整理后的内容
方案二:利用for /f特性快速清理(慎用:会忽略开头空格)
如果确定所有启动条目的描述开头没有需要保留的空格,还可以用for /f的特性快速去除首尾空格,代码更短:
@echo off setlocal EnableDelayedExpansion set Sys32=%SystemRoot%\System32 set "fwdes=%Sys32%\bcdedit.exe /enum firmware | %Sys32%\findstr.exe "description"" for /f "usebackq Tokens=1*" %%a in (`%fwdes%`) do ( for /f "delims=" %%c in ("%%b") do set "bootEntry=%%c" echo [!bootEntry!] ) pause
注意:
for /f默认会忽略字符串开头的空白字符,如果你的启动条目描述开头有需要保留的空格,这种方法会把它们一并去掉,这时方案一更合适。
你的原方法是针对SU650这个特定字符串做的处理,虽然可行,但如果以后新增了其他带多余空格的启动条目,就需要修改代码添加新的判断逻辑,而上面的两种方案都是通用型的,一次编写就能处理所有类似情况~
备注:内容来源于stack exchange,提问作者Mr.Key7
相关产品推荐
相关产品推荐

