Board logo

标题: [文本处理] 求助批处理如何解析C语言生成的exe封装指令 [打印本页]

作者: laoxin    时间: 2015-12-15 17:07     标题: 求助批处理如何解析C语言生成的exe封装指令

想做个批处理进行文本处理比如有一个txt里面有以下内容:
START_0:
随机的内容(里面有需要替换的字符串)
随机的内容(里面有需要替换的字符串)
随机的内容(里面有需要替换的字符串)
END_0



START_n:
随机的内容(里面有需要替换的字符串)
随机的内容(里面有需要替换的字符串)
随机的内容(里面有需要替换的字符串)
END_n
我想要做的是找到START_X,将START_X到END_X里面查找我想要替换的字符串,替换后将START_X到END_X的内容复制到另一个文本里,
然后发现批处理的find 只能找到该字符串并把整行复制,现在想用C语言封装个find.exe,生成一个新的findstring指令,批处理调用findstring
指令,能够找到字符串所在的坐标,方便进行替换,想问问有没有大神知道呢!!
作者: flyinnet9    时间: 2015-12-15 17:50

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p n=输入数字:
  4. (for /f "delims=" %%a in (a.txt) do (
  5.   if "%%a"=="END_!n!" set f=1
  6.   if defined f exit /b
  7.   if defined f1 echo.%%a
  8.   if "%%a"=="START_!n!:" set f1=1  
  9. ))>result.txt
复制代码

作者: CrLf    时间: 2015-12-15 18:24

这种需求...还不如用现成的第三方
作者: 回家路上    时间: 2015-12-15 18:52

看完了,竟然不知道你这第三方想自己想还是让别人写。

专门为一个特殊的需求整一个第三方?想要改就得重新编译生成,真不嫌麻烦。
如果你自己会的话当然不反对。否则,sed和gawk就足够了吧。
作者: laoxin    时间: 2015-12-16 00:04

回复 2# flyinnet9


    非常感谢!大部分处理已经完成,只是还差某些数字替换,比如:
HEX:00         07                 05                 08                         09                   
HEX:00         07                 0f                 10                                              
HEX:00         07                 05                 08                         09         00         09
HEX:00         07                 05                 08                         09                   
上面的数字是随机的,长度也是随机的,数字与数字之间用TAB和空格隔开的,但是空格与TAB的个数 不定,我要做的处理是在每个数字前加上0x同时用,隔开,同时返回长度,如下:
lenth=5,0x00,0x07,0x05,0x08,0x09                   
lenth=4,0x00,0x07,0x0f,0x10                     
lenth=7,0x00,0x07,0x05,0x08,0x09,0x00,0x09
lenth=5,0x00,0xa7,0x05,0x08,0x09                   
我要用for/F用空格进行分割吗?但是输出的个数又不确定,请问还有什么更好的办法吗
作者: flyinnet9    时间: 2015-12-16 10:06

本帖最后由 flyinnet9 于 2015-12-16 10:08 编辑

返回长度表示无力
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=2 delims=:" %%a in (result.txt) do (
  4.   for %%b in (%%a) do (
  5.     set str=%%b
  6.     set str=0x!str!
  7.     set /p =!str!,<nul
  8.   )
  9.   echo.
  10. )
复制代码

作者: 回家路上    时间: 2015-12-16 10:29

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=2 delims=:" %%l in (a.txt) do (
  3. for %%i in (%%l) do (
  4. set /a n+=1
  5. set line=!line!,0x%%i
  6. )
  7. echo;length=!n!!line!
  8. set n=&set line=
  9. )
  10. pause & exit /b
复制代码

作者: laoxin    时间: 2015-12-16 15:28

回复 6# flyinnet9

谢谢!!问题已解决
作者: laoxin    时间: 2015-12-16 15:30

回复 7# 回家路上


    非常感谢!!语句太经典了!原来批处理还可以这样,学习了!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2