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

[文本处理] 批处理如何在多个文本文件中查找指定内容并做标记?

[复制链接]
发表于 2010-4-16 10:28:34 | 显示全部楼层 |阅读模式
一个文件夹下有100多文本文件,每个TXT文件的内容如下:

【1.txt】
2000 橡胶
4000 乙烯
400 聚苯乙烯
200 碳4
.......

【2.txt】
1500 橡胶
150 石油焦
240 乙烯
1000 石脑油
......

【3.txt】
2500 重油
640 柴油
140 乙烯
.....


现在我想把这个文件夹下的所有TXT文件里的“乙烯”那一行前面加个“;号”,注释掉,不要了。请问怎么写批处理啊。

注:文件名都是中文的,不是1、2、3、4这样排序的。

[ 本帖最后由 binsea 于 2010-4-18 14:16 编辑 ]
发表于 2010-4-16 11:27:34 | 显示全部楼层
请测试成功后再运行:

  1. @echo off
  2. for %%a in (*.txt) do (
  3.      (for /f "tokens=1,2" %%b in (%%a) do (
  4.          if "%%c" equ "乙烯" (
  5.             echo ;%%b %%c
  6.             ) else (
  7.             echo %%b %%c
  8.           )
  9.        ))>temp
  10.        del /q %%a&ren temp %%a
  11. )
  12. echo 搞定!&pause>nul
复制代码

[ 本帖最后由 batman 于 2010-4-16 11:35 编辑 ]
 楼主| 发表于 2010-4-16 12:19:48 | 显示全部楼层
非常感谢,我试了一下。
继续学习中........
发表于 2010-4-16 13:45:27 | 显示全部楼层
聚苯乙烯需要注释么?
 楼主| 发表于 2010-4-17 01:29:12 | 显示全部楼层
回4楼,如果  聚苯乙烯  这样的含有   乙烯  字眼的也算,该怎么判断呢?望不吝赐教
 楼主| 发表于 2010-4-17 01:35:36 | 显示全部楼层
另外还想问一下if的书写格式问题。

if !var:~-2,2%! equ "乙烯" (…)

这种写法不对吗?应该怎么写?
发表于 2010-4-17 06:38:07 | 显示全部楼层
if "!var:~-2!" equ "乙烯" (…)

[ 本帖最后由 sgaizxt001 于 2010-4-17 08:35 编辑 ]
 楼主| 发表于 2010-4-17 08:43:53 | 显示全部楼层

标题

谢楼上的。
能不能给我详细解释一下字符变量左取和右取的书写格式以及意思?就像vb里的left和right?我在论坛没找到。我是新手。
发表于 2010-4-17 13:09:56 | 显示全部楼层

回复 8楼 的帖子

批处理set命令截取字符详解
http://bbs.bathome.net/thread-996-1-1.html

批处理set命令变量字符截取点点通
http://bbs.bathome.net/thread-40-1-1.html

批处理新手set命令截取字符练习工具
http://bbs.bathome.net/thread-1149-1-1.html
发表于 2010-4-17 13:12:31 | 显示全部楼层
  1. sed -i "/乙烯/s/^/;/" *.txt
复制代码
 楼主| 发表于 2010-4-18 11:24:28 | 显示全部楼层

标题

按照版主的代码拓展一下。如果每个文本含有多个 乙烯 ,要保留第一个,其他的注释掉。
  1. echo off&setlocal enabledelayedexpansion
  2. for %%a in (*.txt) do (
  3. set num=0
  4. (for /f "tokens=1,2" %%b in (%%a) do (
  5. if "%%c" equ "乙烯" (
  6. set /a num+=1
  7. if num==1 (
  8.         echo %%b %%c
  9.           ) else (
  10.                  echo ;%%b %%c
  11.                  )
  12. ) else (
  13. echo %%b %%c
  14. )
  15. ))>temp
  16. del /q %%a&ren temp %%a
  17. )
  18. echo 搞定!&pause>nul
复制代码
我编辑了一下

[ 本帖最后由 binsea 于 2010-4-18 14:14 编辑 ]
 楼主| 发表于 2010-4-18 11:25:11 | 显示全部楼层
我想加个计数器,每发现一次 乙烯,加1,if (第一次发现,等于1) (留下), if (大于1) (注释掉)

可是这个计数器不起作用,输出的结果是所有的“乙烯”都注释掉了,第一个也没留下,是什么原因?

[ 本帖最后由 binsea 于 2010-4-18 14:19 编辑 ]
发表于 2010-4-18 12:26:03 | 显示全部楼层

回复 12楼 的帖子

把完整的代码贴出来看看
发表于 2010-4-18 16:07:53 | 显示全部楼层

回复 11楼 的帖子

  1. if !num!==1
复制代码
 楼主| 发表于 2010-4-29 08:41:37 | 显示全部楼层

又拓展一下,不想新开帖了,这样内容集中一点

拓展问题:在所有文本中查找“乙烯”,“乙烯”内容保留,然后在下面增加4条内容,前面的数字与“乙烯”相同。

  1. @echo off
  2. for %%a in (*.txt) do (
  3.      (for /f "tokens=1,2" %%b in (%%a) do (
  4.          if "%%c" equ "乙烯" (
  5.             echo %%b %%c
  6.             echo %%b 铁矿
  7.             echo %%b 铜矿
  8.             echo %%b 锡矿
  9.             echo %%b 镍矿
  10.             ) else (
  11.             echo %%b %%c
  12.           )
  13.        ))>temp
  14.        del /q %%a&ren temp %%a
  15. )
  16. echo 搞定!&pause>nul
复制代码


这样写的执行不了,帮忙看看哪里错了。

还想问个问题:第一个FOR里面 %%a in (*.txt),为什么不用%%a in ('dir *.txt')呢?两者有什么区别?

[ 本帖最后由 binsea 于 2010-4-29 08:47 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 00:04 , Processed in 0.020995 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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