找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21743|回复: 12

[文本处理] 求助批处理提取指定行的指定字段并输出成变量

[复制链接]
发表于 2023-10-28 11:13:15 | 显示全部楼层 |阅读模式
不能插图也不能上传附件。。。。
如下是TXT 内容
Description,Value
Battery Name,02DL008
Manufacture Name,SMP
Serial Number, 2669
Manufacture Date,
Power State,"Charging, AC Power"
Current Capacity (in %),67.6%
Current Capacity Value,"29,920 mWh"
Full Charged Capacity,"44,260 mWh"
Designed Capacity,"50,450 mWh"
Battery Health,87.7%
Voltage,"12,868 millivolts "
Charge/Discharge Rate ,"32,852 milliwatts "
Chemistry ,LiP
Low Battery Capacity (1),200 mWh
Low Battery Capacity (2),"2,213 mWh"
Critical Bias,
Number of charge/discharge cycles,184
Battery Temperature,
Remaining battery time for the current activity (Estimated),
Full battery time for the current activity (Estimated),
Remaining time for charging the battery (Estimated),
Total  time for charging the battery (Estimated),

需要提取第11行Battery Health,87.7%和18行Number of charge/discharge cycles,184 的第二字节 并输出成变量,这个是做电池健康度监控使用的,Battery Health 必须大于95%,而充放电次数小于等于3, 但是我目前只能
  1. for /f "skip=10 delims=, tokens=2 " %%i in (scomma.txt) do echo %%i
复制代码
只能显示10行和之后的输出,百度了各种也成功不了,新手入门,难度太大,还请大佬不吝赐教!
发表于 2023-10-28 11:28:39 | 显示全部楼层
  1. for /f "tokens=2 delims=," %%i in ('type scomma.txt^|find "Battery Health"') do echo %%i
复制代码

评分

参与人数 1技术 +1 收起 理由
smtcao008 + 1 好直接

查看全部评分

发表于 2023-10-28 11:30:50 | 显示全部楼层
  1. @echo off
  2. for /f "skip=10 delims=, tokens=1,* " %%i in (scomma.txt) do (
  3.       if /i "%%i" == "Battery Health" (set "Health=%%j") else if /i "%%i" == "Number of charge/discharge cycles" set "cycles=%%j"
  4. )
  5. if defined Health echo(%Health%
  6. if defined cycles echo(%cycles%
  7. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
smtcao008 + 1 提示 else 报错,去掉百分号呢,有百分号不 ...

查看全部评分

 楼主| 发表于 2023-10-28 11:39:12 | 显示全部楼层
回复 2# pd1


   学习了,谢谢
 楼主| 发表于 2023-10-28 11:41:35 | 显示全部楼层
回复 3# terse


    这个运行提示 此处不该出现else   我研究下,感谢感谢!
发表于 2023-10-28 11:58:36 | 显示全部楼层
回复 1# smtcao008
第3方工具sed( http://bcn.bathome.net/tool/4.9/sed.exe )比较方便

  1. sed -n "/Battery Health/p;\#Number of charge/discharge cycles#p" scomma.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
smtcao008 + 1 结果是一整行,没用,只要数字

查看全部评分

 楼主| 发表于 2023-10-28 12:16:50 | 显示全部楼层
回复 6# hfxiang

谢谢!~~~
发表于 2023-10-28 12:56:02 | 显示全部楼层
回复 1# smtcao008


如果需要上传文件,可以用阿里云盘或百度网盘。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
发表于 2023-10-28 14:46:28 | 显示全部楼层
回复 5# smtcao008
哦 可能环境问题 我这里运行没问题
发表于 2023-10-28 15:13:05 | 显示全部楼层

用findstr可一次锚定两个字段(不能忽略大小写)... 正好示例文件中没有重复关键词

  1. for /f "tokens=2 delims=," %%s in ('findstr "Health, charge/discharge" scomma.txt') do (echo,%%s)
复制代码
发表于 2023-10-28 15:51:12 | 显示全部楼层
回复 10# aloha20200628
严谨一点的话,最好加参数使用findstr,
  1. findstr /ibc:"Battery Health," /c:"Number of charge/discharge cycles," <scomma.txt
复制代码
发表于 2023-10-28 16:27:03 | 显示全部楼层
回复 1# smtcao008
改了一下,不知道是否满足要求

  1. sed -rn "s/^Battery Health,(.*)%$/\1/p;s#^Number of charge/discharge cycles,(.*)$#\1#p" scomma.txt
复制代码
 楼主| 发表于 2023-11-1 17:02:53 | 显示全部楼层
链接:https://pan.baidu.com/s/1hUqCjhlsLnp44ETG_T-tzg
提取码:1234
文档上传了百度网盘
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 10:40 , Processed in 0.022780 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表