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

[文本处理] [已解决]批处理怎么删除指定文本某行之前的所有行

先有两个文本1.txt 2.txt
1.txt内容如下
  1. a0001
  2. a0002
  3. a0003
  4. a0004
  5. a0005
  6. a0006
  7. a0007
复制代码
2.txt内容是1的前部分
  1. a0001
  2. a0002
  3. a0003
  4. a0004
复制代码
现在要删除1.txt文本中,2.txt已经有的部分!也就是a0004前面都删除。但是两个文本都达到上万行,所以不可能用查找所有行的方法来一行行的删除,所以打算换一下:
首先先获取2.txt最后一行的字符串,然后在1.txt查找,并且删除之前的,并且覆盖1.txt,让1.txt的文本内容变成不包括2.txt的内容,1.txt内容全部不重复,所以在2.txt找到的最后一行在1.txt中是唯一的,请问如何写批处理?
1

评分人数

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

本帖最后由 hanyeguxing 于 2011-4-12 15:18 编辑
  1. @echo off
  2. for /f "tokens=2 delims=:" %%a in ('find /v /c "" "2.txt"') do set a=%%a
  3. >"1_.txt" more +%a:~1% "1.txt"
复制代码
1

评分人数

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

TOP

  1. @echo off
  2. for /f %%a in (2.txt) do set /a n+=1
  3. more +%n% 1.txt>3.txt
  4. move 3.txt 1.txt
复制代码
1

评分人数

TOP

@echo off
for /f "tokens=2 delims=:" %%a in ('find /v /c "" "2.txt"') do set a=%%a
>"1_.txt" more +%a:~1% "1.txt"
hanyeguxing 发表于 2011-4-12 15:15

好办法,一直忽略了c开关,没往这上面想

TOP

无论在for 中使用skip还是使用more +n,跳过的行是包括空行的,而使用for /f加set/a n+=1统计是忽略这些空行的,而且速度远比find要慢
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

@echo off
for /f "tokens=2 delims=:" %%a in ('find /v /c "" "2.txt"') do set a=%%a
>"1_.txt" more +%a:~1% "1.txt"
hanyeguxing 发表于 2011-4-12 15:15


谢谢,完美解决,但是结果保存到了1_.txt中,我再加个3楼大哥的move 1_.txt 1.txt就全部好了,谢谢大家!

TOP

6# jzsgyml


跟这样帖子有什么区别?
http://bbs.bathome.net/thread-11855-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表