如何用批处理提取txt特定字符串之间的16进制数?

来源:百度知道 编辑:UC知道 时间:2024/05/30 19:08:00
比如在message.txt文件中有
cpu: 1002 subsys: AB tag: 007FB
想提取出“1002AB007FB”,并在前面添加“*00”作为标识,然后存成一个新的txt文件。谢谢
谢谢CyraSafia 的回答,但是在txt中每行的格式都不一样。完整的数据是
flag is 0001
Distill: name: aid: d5 bid: 54bc ccpu: 2102 dsubsys: fa etag: 022078AC flength: 8566
name2: aid: e5 bid: 0061 ccpu: 1103 dsubsys: 05
data: fb.4f.21.02.55.10.46.42.4d.

想得到的结果是从第一行提取0001,第二行到第四行均提取关键词冒号后面的十六进制数,最后综合起来,即为0001d554bc2102fa022078AC8566e50061110305fb4f2102551046424d,并将data中数据之间的“.”去掉。
我刚开始学习批量处理,想知道上述功能能否用批量处理实现,还有就是怎么实现,希望得到大家的帮助,谢谢!

非常非常感谢liuzhaonan11的答案,不过本人刚开始接触,程序还有点不明白,还有两个问题。第一,由于有很多条这样的消息,所以希望在每个flag前面加上"*00",用来标识不同的消息。第二,有时不需要全部的数据,比如说不需要"dsubsys"后面"05"这个数据,怎么能够标识它,从而剔除这个数据呢?
期待大家的回答,得到解决后会增加分数的。

比如,将第1条提取出所有数字,如果前一个词不是"dsubsys:",然后存在result1变量里,第二条存在result2变量里,以此类推,你再自行处理输出.不过文件比较大时,批处理会非常慢,建议用C语言等其他方法.测试结果:
第1条:0001d554bc2102022078AC8566e500611103fb4f2102551046424d
第2条:0001d554bc2102022078AC8566e500611103fb4f2102551046424d

@echo off
setlocal enabledelayedexpansion
call:main
endlocal
echo.
pause>con
goto :eof

:main
set /a num=0
set "lastword="
for /f "delims=" %%i in ('type "message.txt"') do (
set "line=%%i"
call:add
REM 如果词数可能很多,那么要用goto,这样此处必须使用call,否则goto时会退出循环
)
REM 处理完毕
(
for /l %%i in (1,1,!num!) do (
set/p<nul=第%%i条:!result%%i!
echo.
REM 输出换行号
)
)>con
REM 输出到文件con(屏幕)
exit /b
:add
call:getword "line" ". "
REM 从该行中读取一个词,以". "分隔
if errorlevel 1 goto :eof
REM 如果读到结尾,返回for循环以分析新的一行
if "!answer!&q