找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24974|回复: 8

[文本处理] [已解决]批处理怎么删除文本中不包含特定字符的所有行?

[复制链接]
发表于 2011-5-24 23:18:20 | 显示全部楼层 |阅读模式
我有许多文本需要处理,内容很复杂,需要将含有FOUND的行保留,其余的行全部删除.如果不包含有FOUND的文本就执行删除操作。
我在论坛搜索过,没有看到类似的帖,所以无奈只得来求助了.

当然不是下面代码这样简单,呵呵。
  1. findstr "FOUND" "1.txt">>2.txt
复制代码
我的思路是把含有FOUND的行提取出来,然后输出到新文本,最后将新文本命名为原来的文件名。
只是文本太多了,我实在不知道怎么写了。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-5-24 23:59:00 | 显示全部楼层
本帖最后由 batman 于 2011-5-25 00:02 编辑

请先测试。。。

  1. @echo off
  2. for %%a in (*.txt) do (
  3.      if exist $ del /q $
  4.      for /f "delims=" %%b in ('findstr "FOUND" "%%a"' ) do echo %%b>>$
  5.      if exist $ (
  6.         move $ "%%a"
  7.         ) else (
  8.         del /q "%%a"
  9.      )
  10. )
复制代码

评分

参与人数 2技术 +2 收起 理由
fengyun530 + 1 简单明了
Batcher + 1 乐于助人

查看全部评分

发表于 2011-5-25 00:17:42 | 显示全部楼层
(for /f "delims=" %%i in (1.txt) do (echo %%i|find /i "found") )>2.txt
 楼主| 发表于 2011-5-25 00:17:51 | 显示全部楼层
batman..

老大,我纠结四个多小时了。.
 楼主| 发表于 2011-5-25 00:28:58 | 显示全部楼层
测试完全通过,激动啊,只是有点不明白$的作用,没看到有讲解过……
非常谢谢batman 和applba 这么晚还给予我帮助,非常感谢。
发表于 2011-5-25 00:37:56 | 显示全部楼层
本帖最后由 batman 于 2011-5-25 00:46 编辑

$就是一个临时文件,当要搜索的txt中没有found关键字时,第二个for中do后面的命令是不会执行的,所以就不会生成临时文件$,后面通过判断是否存在临时文件$来决定是move还是del。。。
发表于 2011-5-25 00:50:19 | 显示全部楼层
本帖最后由 applba 于 2011-5-25 01:01 编辑
  1. @echo off
  2. set tmpfile=tmp%random%.txt
  3. for /r %%a in (*.txt) do (
  4.   ( for /f "usebackq delims=" %%b in ("%%~a") do ( echo %%b | find /i "found"))>%tmpfile%
  5.   if not exist "%%~na.bak.txt" ren "%%~a" "%%~na.bak.txt"
  6.   move /y "%tmpfile%" "%%~a"
  7.   )
复制代码
move /y 直接搞定啊,还要del做神马……
发表于 2011-5-25 09:41:01 | 显示全部楼层
都很不错。不过还是batman斑竹写的更让我容易看得懂些。

applba的也可以。不过写得我有点看不太懂。"%%~a"尤其是这个。虽然我知道他表示的是其中某一个txt文件。%tmpfile%表示的效果和$临时文件应该效果差不多!

好象看懂了applba代码的一些。原理是:
  便历当前目录下所有txt文件。包括子目录(/r)
再次便历单独的某个txt文件。如果某行包括“found"就把该行移到%tmpfile%
  然后重命令该文件为%%~na.bak.txt%,目的只是为了下面的move操作,别无其他意思
把找到的"found"行写回%%~a。这里就省去了一个删除,但是代码结构上好象更让人不容易直白性的理解!不过也算是一种突破吧。
发表于 2011-5-25 12:05:49 | 显示全部楼层
本帖最后由 lvsehuaxue 于 2011-5-25 12:09 编辑

  1. @echo off
  2. for %%i in (*.txt) do (findstr /i "found" %%i)>$&&move $ %%i||del /q %%i  
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 09:01 , Processed in 0.020571 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表