BATCH - 如何从多行命令输出中仅获取一行

时间:2018-05-29 10:01:38

标签: python windows batch-file vbscript batterylevel

状态栏中的“电池”图标不起作用,我使用Windows批处理脚本来检查电池电量。 (我不想修复图标。)但是,输出有点难看,下一行没有空格和普通数字。

那么,我该如何转换

EstimatedChargeRemaining
83

Battery Level is at 83

(或其他任何类型。)

P.S:我使用的命令是WMIC PATH Win32_Battery Get EstimatedChargeRemaining
P.P.S:我也不介意它是另一种语言(例如Python,VBS),只要它只输出一次。那么,如何从命令行脚本检查电池电量

3 个答案:

答案 0 :(得分:2)

for /f "tokens=* delims=" %%a in ('WMIC PATH Win32_Battery Get EstimatedChargeRemaining /format:value') do (
   for %%# in ("%%a") do set "%%#"
)

echo Battery Level is at %EstimatedChargeRemaining%

答案 1 :(得分:1)

尝试使用subprocess& re模块。

<强>实施例

import re
import subprocess
s = subprocess.check_output("WMIC PATH Win32_Battery Get EstimatedChargeRemaining")
print("Battery Level is at {0}".format(re.findall("\d+", s)[0]))

<强>输出:

Battery Level is at 83

答案 2 :(得分:1)

以下对我有用,并且是 @npocmaka 的答案的修改(谢谢,npocmaka)。

FOR /F "Tokens=1,* Delims==" %%A in (
    'wmic PATH Win32_Battery get EstimatedChargeRemaining  /Format:list ^| FINDSTR "[0-9]"'
)DO (echo Battery Level is at %%B)

我改变了什么:
FINDSTR将输出从 Unicode 转换为 ANSI ,以便按FOR /F进行解析

感谢@Rakesh尝试。