标题: [文本处理] 批处理如何截取hex文件中的一段? [打印本页]
作者: jzy8158 时间: 2021-6-25 17:00 标题: 批处理如何截取hex文件中的一段?
内容如下:
:02000004800179
:200000000A027536313531353230303033415254303030530680008000000016D08000979B
:200020000000031F8C801C4000000005E6801F0000000000AA801F2000000000F6802000AD
:02000004800971
:20000000000001000000B040666606410000000000000000000000000000000000000000DC
:200020000000000000000000000000000000000000000000000000000000000000000000C0
:200040000000000000000000000000000000000000000000000000000000000000000000A0
:20006000000000000000000000000000000000000000000000000000000000000000000080
:20008000000000000000000000000000000000000000000000000000000000000000000060
:2000A000000000000000000000000000000000000000000000000000000000000000000040
:2000C000000000000000000000000000000000000000000000000000000000000000000020
:02000004801F5B
:0A028000916000E8D9EEDA60DC0EB0
:0A02A000916000E8D9EEF480DC0E56
:0A02C000916000E8D9EECA90DC0E50
需要完成的操作是
(1) :02000004800971包括后面的7行全部截取出来,放到另外一个hex文件中,因为原文有几万行,这个精简了一下
(2)完成任务后,立即跳出for循环,因为有几万行,不跳出来,循环一遍时间比较长
(3)在新的hex末尾加上 :00000001FF
作者: newswan 时间: 2021-6-25 18:25
本帖最后由 newswan 于 2021-6-25 18:28 编辑
grep- grep ":02000004800971" -A 7 1.txt >2.txt
- echo ":00000001FF">>2.txt
复制代码
powershell- $file1 = "1.txt"
- $file2 = "2.txt"
- ((Get-Content -raw $file1) -match “:02000004800971(`n.*){7}”)
- $matches[0] + ":00000001FF" | out-file $file2
复制代码
`n 或者 `r`n
作者: idwma 时间: 2021-6-25 19:34
- @echo off&setlocal EnableDelayedExpansion
- set out=b.txt
- for /f %%a in (a.txt) do (
- set/a n+=1
- if %%a equ :02000004800971 set/a nn=!n!+8
- if !n! lss !nn! echo %%a >>!out!
- if !n! equ !nn! echo :00000001FF >> !out! & goto :oo
- )
- pause
- :oo
复制代码
作者: jzy8158 时间: 2021-6-28 15:37
回复 2# newswan
最好只用bat脚本实现
作者: jzy8158 时间: 2021-6-28 15:39
回复 3# idwma
这样好像FOR循环还是要执行完
作者: idwma 时间: 2021-6-28 15:51
回复 5# jzy8158
加个回显可看到第几就退出了- @echo off&setlocal EnableDelayedExpansion
- set out=b.txt
- for /f %%a in (a.txt) do (
- set/a n+=1
- if %%a equ :02000004800971 set/a nn=!n!+8
- if !n! lss !nn! echo %%a >>!out!
- if !n! equ !nn! echo :00000001FF >> !out! & goto :oo
- )
- :oo
- echo 第 !n! 行
- pause
复制代码
作者: jzy8158 时间: 2021-6-28 16:38
回复 6# idwma
可以了 应该是跳出去了,谢谢
作者: jzy8158 时间: 2021-7-20 14:19
回复 6# idwma
你好如果要求变了,需要执行效率高一点
(1) :02000004800971包括后面的7行全部截取出来,放到另外一个hex文件A中,因为原文有几万行,这个精简了一下
(2)完成任务后,立即跳出for循环,因为有几万行,不跳出来,循环一遍时间比较长
(3)在新的hex文件A末尾加上 :00000001FF
(4)8行内容截取出来后,剩下的行数组成新的B文件
作者: qixiaobin0715 时间: 2021-7-20 14:41
回复 8# jzy8158
批处理执行方式不是你想象的那样。
作者: idwma 时间: 2021-7-20 15:35
回复 8# jzy8158
@echo off&setlocal EnableDelayedExpansion
set out=b.txt
set outt=c.txt
(for /f %%a in (a.txt) do (
set/a n+=1
if %%a equ :02000004800971 set/a nn=!n!+8
if !n! lss !nn! (echo;%%a>>!out!) else if !n! equ !nn! (echo;:00000001FF>>!out! &echo %%a) else echo %%a
))>!outt!
pause
作者: qixiaobin0715 时间: 2021-7-20 16:56
回复 8# jzy8158 - @echo off
- set n=0
- setlocal enabledelayedexpansion
- (for /f "delims=" %%i in (a.hex) do (
- if "%%i"==":02000004800971" set n=1
- if !n!==0 (
- echo,%%i
- ) else (
- set "str!n!=%%i"
- set /a n+=1
- if !n!==9 set n=0
- )
- ))>B.hex
- (for /l %%a in (1,1,8) do echo,!str%%a!
- echo,:00000001FF
- )>new-A.hex
- pause
复制代码
刚才有点小问题,已修改。
作者: jzy8158 时间: 2021-7-21 15:47
回复 10# idwma
运行了一下,应该没问题,谢谢
作者: jzy8158 时间: 2021-7-21 15:48
回复 11# qixiaobin0715
试了一下,完全OK,谢谢了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |