[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理怎样获取指定字符串所在行之后的文本?

下午发个帖子意思有偏差,现在重新请教各位朋友了。
两个日志文件,一个源文件source.txt,一个源文件处理得到的成功文件Success.txt ,成功文件不一定是源文件前面的全部,因为有失败的,现在打算获取成功文件最后一行的字符串,然后去源文件查找并且删除之前的内容,或者换个方式,查找源文件该字符串所在行,然后获取该行数之后的内容保存。

举例:源文件source.txt
  1. a0001
  2. a0002
  3. a0003
  4. a0004
  5. a0005
  6. a0006
  7. a0007
  8. a0008
  9. a0009
  10. a0010
复制代码
成功文件Success.txt
  1. a0003
  2. a0004
  3. a0005
复制代码
然后我找到个获取成功文件最后一行的代码
  1. for /f "delims=" %%i in (Success.txt) do (set a=%%i)
  2. echo %a%>>3.txt
复制代码
这个可以得到成功文件的最后一行 a0005的数据,请问怎么根据这个数据删除源文件该数据之前的所有数据,并且覆盖保存?
得到如下结果
  1. a0006
  2. a0007
  3. a0008
  4. a0009
  5. a0010
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

谢谢斑竹大人!最好的批处理论坛,我们永远支持!

TOP

  1. @echo off
  2. set a=Success.txt
  3. set b=source.txt
  4. for /f "usebackq delims=" %%a in ("%a%") do set "n=%%a"
  5. if defined n for /f "delims=:" %%a in ('findstr /ni /c:"%n%" "%b%"') do set m=%%a
  6. if defined m (
  7. more +%m% "%b%">temp
  8. move temp "%b%"
  9. )
复制代码
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

1# jzsgyml
  1. @echo off
  2. for /f "delims=" %%i in (Success.txt) do (
  3.     set a=%%i
  4. )
  5. sed -i "0,/%a%/d" source.txt
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

谢谢二楼版主帮助,这次运行没有问题,通过成功文件最后一行的字符串查找,就可以删除前面不管成功,还是失败的,具有通用性,现在测试没有问题了!
另外那个结果文件a0010,是我复制错了,应该是有的!我现在在主帖改过来,防止误导后来需要的朋友!

回复三楼,成功失败是随机的,失败的处理行就不会保存在成功文件,所以成功文件是内容是源文件的随机子集。

TOP

成功和不成功是这么有规律?成功就连续成功,一不成功就都不成功了?
***共同提高***

TOP

本帖最后由 hanyeguxing 于 2011-4-12 19:50 编辑
  1. @echo off
  2. set a=Success.txt
  3. set b=source.txt
  4. for /f "usebackq delims=" %%a in ("%a%") do set "n=%%a"
  5. for /f "delims=:" %%a in ('findstr /ni /c:"%n%" "%b%"') do set n=%%a
  6. more +%n% "%b%">temp
  7. move temp "%b%"
复制代码
代码未测试:从%a%文件获取最后一行内容并以此内容查询%b%文件中的行号,再以此行号跳过然后覆盖输出
ps:源文件中的最后一行a0010怎么到最后还没了?
1

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

返回列表