我正在处理一个批处理文件,其中需要显示电池的估计剩余电量,我已经实现了我的目标,但是由于命令结果中存在多余和多余的空格,我对结果不满意。
这是我的代码:
:charge
FOR /F "delims= skip=1" %%i IN ('WMIC PATH Win32_Battery Get EstimatedChargeRemaining') DO ( SET CHR=%%i
GOTO results )
:results
ECHO "Battery Percentage: %CHR%"
PAUSE
GOTO menu
以上命令的结果为:"Battery Percentage: 100 "
如何在结果末尾去除那些空格?
预先感谢,非常感谢您提供任何帮助。
答案 0 :(得分:4)
尝试这样:
:charge
@echo off
FOR /F "tokens=* delims=" %%i IN ('WMIC PATH Win32_Battery Get EstimatedChargeRemaining /format:value') DO (
for /f "tokens=* delims=" %%# in ("%%i") do set "%%#"
)
echo %EstimatedChargeRemaining%
WMIC添加了其他字符,但可以使用for循环再删除一个-> https://www.dostips.com/forum/viewtopic.php?t=4266
答案 1 :(得分:2)
我不明白您为什么要问same question两次...
无论如何,总而言之:wmic
返回Unicode文本,而for /F
用于ASCII / ANSI文本。 for /F
将Unicode文本转换为ANSI,但留下了诸如孤立的回车符之类的转换伪影。这就是为什么似乎在(最后)数据行之后输出空行的原因。尾随的 SPACE 不是转换伪像,它们实际上是由wmic
命令输出的。
例如,命令行:
for /F "delims=" %%I in ('wmic Path Win32_Battery get EstimatedChargeRemaining') do echo/%%I
...输出类似以下文本的内容({CR}
代表回车符,{SPACE}
代表 SPACE ):
EstimatedChargeRemaining{SPACE}{SPACE}{CR} 100{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{CR} {CR}
环绕另一个for /F
循环会删除这些回车符,因此,命令行:
for /F "delims=" %%I in ('wmic Path Win32_Battery get EstimatedChargeRemaining') do (
for /F "delims=" %%J in ("%%I") do echo/%%J
)
...将输出如下内容:
EstimatedChargeRemaining{SPACE}{SPACE} 100{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}{SPACE}
如您所见,回车符消失了,最后一行也消失了(您在代码中通过goto return
命令跳过了该行)。不过,任何尾随的 SPACE 仍然存在。但是,可以通过适当调整tokens
的{{1}}和delims
选项来消除这种情况:
for /F
输出将类似于(这次没有任何尾随的 SPACE ):
rem // Skip the header line by `skip` option in the outer loop; do not tokenise anything here: for /F "skip=1 delims=" %%I in ('wmic Path Win32_Battery get EstimatedChargeRemaining') do ( rem /* Tokenise the output as needed in the inner loop; rem remember that `tokens` defaults to `1` and `delims` defaults to SPACE and TAB: */ for /F %%J in ("%%I") do echo/%%J )
一种更好的方法,尤其是当100
返回的数据可能单独包含 SPACE 时,是使用{更改wmic
命令的输出格式{1}}选项,不会产生尾随空格。
例如,命令行:
wmic
...输出类似以下文本的内容(/VALUE
代表回车符):
for /F "delims=" %%I in ('wmic Path Win32_Battery get EstimatedChargeRemaining /VALUE') do echo/%%I
再次环绕另一个{CR}
循环将删除那些回车符,因此,命令行:
{CR}
{CR}
EstimatedChargeRemaining=100{CR}
{CR}
{CR}
{CR}
...将输出如下内容:
for /F
这里,回车符也消失了,所有仅包含一个这样的字符的行也消失了。请注意,根本没有结尾的 SPACE 。现在,您只需要拆分值的名称:
for /F "delims=" %%I in ('wmic Path Win32_Battery get EstimatedChargeRemaining /VALUE') do (
for /F "delims=" %%J in ("%%I") do echo/%%J
)
输出将类似于:
EstimatedChargeRemaining=100
如果值以等号开头,则此方法失败。要正确处理此类问题,您可以执行以下操作:
rem // Do not tokenise anything in the outer loop:
for /F "delims=" %%I in ('wmic Path Win32_Battery get EstimatedChargeRemaining /VALUE') do (
rem /* Tokenise the output as needed in the inner loop: */
for /F "tokens=1* delims==" %%J in ("%%I") do echo/%%K
)