从变量中去除尾随空格

Posted

技术标签:

【中文标题】从变量中去除尾随空格【英文标题】:Strip trailing spaces from variable 【发布时间】:2021-10-22 04:56:25 【问题描述】:

Windows 10 批处理文件

试图。这是我到目前为止所拥有的......

For /F "Tokens=1* Delims= " %%A In ('WMIC Path Win32_VideoController Get Name^,DriverVersion^|FindStr /I "Intel"') Do @Set GFXNAM=%%B&SetGFXVER=%%A

这样,我得到了正确填充的两个变量......

GFXNAM=[英特尔(R) 超高清显卡 630          ] GFXVER=[27.20.100.9316](已添加括号以显示变量中的尾随空格)

但是,我需要一种方法来修剪 GFXNAM 变量末尾的那些尾随空格。不幸的是,由于 GFXNAM 变量值中的括号,我无法使用 for 循环以及沿以下行的变量操作...

(set NEWGFXNAM=%GFXNAM:~0,-1%)

由于那些可爱的毒字符,它失败了。我需要做的就是能够从 GFXNAM 变量中去除那些尾随空格。应该没那么难,只是我看不出来。

任何帮助将不胜感激。

提前致谢。

【问题讨论】:

不要将表输出用于 WMIC 命令。查看使用/Format 选项的可用选项,即/Format:List/Format:CSV/Format:MOF 好吧,如果我使用 PowerShell 而不是批处理文件,那将非常有效。 (笑) 我在几乎所有的 WMIC 批处理脚本中都使用了它们,最常见的是 MOF,猜猜看,我的所有脚本都能完美运行 抱歉,我的评论并不是负面或不正确的。 那是因为list会在不同的行输出每个结果,所以findstr只会匹配包含字符串Intel的行!无论如何,您不需要为此使用findstr.exe,WMI 已经允许 WQL 查询,因此请使用它来选择仅以字符串Intel 开头的Name。如果不出意外的话,在流程的上层进行过滤比以后更有效。 【参考方案1】:

这是一个使用我的评论的简单示例,并且基于您的 PC 中只有一个英特尔显卡:

@Echo Off
SetLocal EnableExtensions
Set "GFXNam="
Set "GFXVer="
For /F Tokens^=6^ Delims^=^" %%G In ('%SystemRoot%\System32\wbem\WMIC.exe Path
 Win32_VideoController Where "Name Like 'Intel%%'" Get Name^, DriverVersion
 /Format:MOF 2^>NUL') Do If Not Defined GFXVer (Set "GFXVer=%%G"
) Else Set "GFXNam=%%G"
Set GFX 2>NUL
Pause

如果您想检查它是否正确定义了变量,可以将Set GFX 2>NUL 替换为If Defined GFXVer If Defined GFXNam Echo Name: [%GFXNam%], Version: [%GFXVer%]

【讨论】:

以上是关于从变量中去除尾随空格的主要内容,如果未能解决你的问题,请参考以下文章

从 Java 字符串中去除前导和尾随空格

IDEA去除行尾空格

Bash:从输出中去除尾随换行符

十进制数据类型在需要显示时去除尾随零

xpath 去除空格

在 Access DAO SQL INSERT 中保留尾随空格