从变量中去除尾随空格
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%]
。
【讨论】:
以上是关于从变量中去除尾随空格的主要内容,如果未能解决你的问题,请参考以下文章