Board logo

标题: [文本处理] 批处理BAT如何找到指定行并删除行以上文字? [打印本页]

作者: lxj    时间: 2009-1-9 09:55     标题: 批处理BAT如何找到指定行并删除行以上文字?

格式如:
123
321
125
236
212
125
323
假如以212为例,找到212这一行,并删除212上面的所有.保留212下面的所有.得出结果如下:
125
323

能否用批处理做到,应该如何做?谢谢各位大大.
作者: Batcher    时间: 2009-1-9 11:27

如果有多行212,以哪行为准?
作者: lxj    时间: 2009-1-9 11:47

没有多行,只有一行的啊.就是多行没有重复的.
作者: Batcher    时间: 2009-1-9 13:18

  1. @echo off
  2. for /f "tokens=1 delims=:" %%a in ('findstr /n "212" "a.txt"') do (
  3.   more +%%a "a.txt"
  4. )
复制代码

作者: lxj    时间: 2009-1-9 14:22

不行啊.
提示:-- More (0%) --
然后就不动了.
作者: Batcher    时间: 2009-1-9 14:38     标题: 回复 5楼 的帖子

把你的a.txt内容贴出来看看?
a.txt是UNICODE编码的话,需要这样:
  1. @echo off
  2. for /f "tokens=1 delims=:" %%a in ('type "a.txt"^|findstr /n "212"') do (
  3.   more +%%a "a.txt"
  4. )
复制代码

作者: lxj    时间: 2009-1-9 16:52

我的a.txt不是数字.
caaa
caab
caac
caad
caae
caaf
caag
caah
caai
caaj
caak
caal
caam
caan
caao
caap
caaq
caar
caas
caat
caau
caav
caaw
caax
caay
caaz
caba
cabb
cabc
cabd
cabe
cabf
cabg
cabh
cabi
cabj
cabk
cabl
cabm
cabn
cabo
cabp
cabq
是这种,想中间去掉一个,并把上面的也去掉.
运行了这个批处理,两次得出同一个结果.
作者: shqf    时间: 2009-1-9 20:33

两次运行的结果是什么?是否正确呢?楼上没说清楚呵。其实BATCHER的方法基本能实现你的要求了。只是结果显示在屏幕上而已。稍改一下就可以了。下面再给出我想的一段代码,虽稍繁点,但生成了一个新的A.TXT文件,完全符合你的要求:
  1. @echo off
  2. for /f %%a in ('type a.txt') do (
  3.   if defined flag1 (
  4.     if defined flag2 (>>a.txt echo %%a) else (
  5.       >a.txt echo %%a
  6.       set flag2=1
  7.     )
  8.   )
  9.   if "%%a"=="caae" set flag1=1
  10. )
  11. start a.txt
复制代码

作者: aabb    时间: 2009-1-9 20:54

楼主把要执行的文件保存为b.txt放在目录下,然后执行下面的代码,会在同目录下生成一个f.txt
其中f.txt就是你想要的文件!!
  1. @echo off
  2. set /p w=请输入要删除开始的数:
  3. for /f %%i in (b.txt) do (
  4. set /a a+=1
  5. echo %%i>c.txt
  6. findstr "%w%">nul c.txt&&goto f
  7. )
  8. :f
  9. for /f "skip=%a%" %%b in (b.txt) do (
  10. echo %%b>>f.txt
  11. )
  12. del c.txt
  13. pause
复制代码

作者: Batcher    时间: 2009-1-10 14:10     标题: 回复 7楼 的帖子

  1. @echo off
  2. for /f "tokens=1 delims=:" %%a in ('type "a.txt"^|findstr /n "212"') do (
  3.   more +%%a "a.txt">"b.txt"
  4.   move /y "b.txt" "a.txt"
  5. )
复制代码

作者: lxj    时间: 2009-1-11 08:39

首先谢谢各位的热心.我现在有空上来试了一下.8楼和9楼的行不通.
十楼的管理员的批处理结果是出来了,但好像不支持大批的.比如几百MB同类的.只显示了58KB的资料.

再次谢谢各位.
作者: Batcher    时间: 2009-1-11 10:11     标题: 回复 11楼 的帖子

下次提问时,建议在顶楼描述清楚问题背景,10楼的more不适用于大文件。
作者: shqf    时间: 2009-1-11 15:39

根据你所列的a.txt,8楼的代码我测试过的,是行的。
严重建议版主:要求提问者把要处理的源文件上传,或截取一段贴出来。不要重新杜撰一个。
作者: zhanglei1371    时间: 2014-2-27 05:35

关于这个问题,如果要取从开始到关键词所在行,批量操作,该怎么做?
作者: 我来了    时间: 2016-12-15 23:09

回复 14# zhanglei1371

我也想知道




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