![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-09 21:58 |
共 47,811 主题排行 / 349,897 发帖 / 今日 2 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 求助!文本格式的文件中寻找某行的某个字符.... |
| 可打印版本 1,139 / 10 |
| 第1楼 liuxuehui | 发表于 2006-07-01 01:08 |
| 新手上路 发帖 5 积分 18 | |
|
求助!文本格式的文件中寻找某行的某个字符.... 公司经常有大批量同类型的文件需要整理出来.
情况如下: 现有1000个文本文件(是测试数据),其内容中有一个标识符(在文件的第五行有一个字母"P"或者是一个"F",用来标记是测试"Pass"还是"Fail"的.但内容的其它行有相同的字母.只有第五行只有一个字母"P"or"F").我想从这1000个文件中挑选出标有"PASS"的机(第五行是"P"字母).并把它们复制到某个文件夹."FAIL"放另一个文件夹. |
|
| 第2楼 namejm | 发表于 2006-07-01 09:06 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
如果这1000个文本文件位于同一目录D:\test下,且该目录只有这1000个文本文件,并且文件名中,除了后缀名外,再没有其他的点号,我想,这个问题可以分两步解决:
第一步:先把这些文件的文件名提出来,按照一行一个文件名的格式存放在另外目录的list.txt文件中; 第二步:用for命令解析list.txt中的文件,用find命令搜索字母p或者f,如果发现p,将文件放到d:\test1中;如果发现了f(也就是没有发现p),则把文件放到d:\test2中。 通过以上的分析,可以产生如下代码: 另:楼主给出的环境还不够具体,所以在写这段代码的时候,我自行加上了很多限制条件。如果有更具体的环境的话,写代码就有针对性一些; |
|
| 第3楼 bagpipe | 发表于 2006-07-01 10:16 |
| 银牌会员 发帖 425 积分 1,144 来自 北京 | |
|
把这个批处理放到你要整理的那个1000个文本文件的文件夹下,会自动产生F和P这两个文件夹,当然了,各自就是你的PASS 和 FAIL了
@echo off md .\P&md .\F for %%a in (*.txt) do ( for /f "tokens=2 delims=:" %%i in ('"findstr /n .* %%a|findstr "5""') do ( if /i "%%i"=="P" (copy "%%a" .\P) else if /i "%%i"=="F" copy "%%a" .\F ) ) |
|
| 第4楼 namejm | 发表于 2006-07-01 10:29 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
sorry,看了bagpipe的代码之后,才发现2楼的代码漏掉了“第五行”这个条件,2楼的代码作废,请楼主用3楼bagpipe的代码吧。
bagpipe真厉害,写的代码非常简洁,专业人士就是不一样啊。 |
|
| 第5楼 namejm | 发表于 2006-07-01 10:32 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
for中用了通配符*,可以轻松地匹配所有的文本文件,比用dir命令列文件名的做法简洁得多,而且不会产生临时文件,再次对bagpipe的代码表示赞叹。
|
|
| 第6楼 liuxuehui | 发表于 2006-07-06 01:39 |
| 新手上路 发帖 5 积分 18 | |
|
非常感谢各位,由于工作忙没有来看发表的求助,在此向各位说声SORRY!本人为了这件事而看了一个星期的批处理,就是没有摸透其中的奥妙,以后多向各位学习.看到@
我要好好分析分析这几个文件,不懂再问兄弟们!"我菜我怕谁呀!".......顶...... |
|
| 第7楼 liuxuehui | 发表于 2006-07-06 06:09 |
| 新手上路 发帖 5 积分 18 | |
|
风笛!这一句能详细说说吗? for /f "tokens=2 delims=:" %%i in ('"findstr /n .* %%a|findstr "5""')
|
|
| 第8楼 bagpipe | 发表于 2006-07-07 09:22 |
| 银牌会员 发帖 425 积分 1,144 来自 北京 | |
|
好的,简单解释一下
findstr /n .* %%a|findstr "5"这句代码的主要作用就是把文件的第5行单提出出来,其他过滤掉,包括空行,用.*来显示每行,并且用/n表明每行的行号,这样显示出的效果就是 5:F 然后用FOR语句提取F,之所以delims=:就是用:号做为分隔符,然后取第二个变量也就是正好把tokens设置成等于2 OK?????????????? |
|
| 第9楼 dosfroum | 发表于 2006-07-08 11:59 |
| 初级用户 发帖 54 积分 154 | |
| 第10楼 buddiyar | 发表于 2006-07-13 21:17 |
| 初级用户 发帖 75 积分 160 | |
|
做个记号 好象用得着啊
哈哈 |
|
| 第11楼 pclxxxh | 发表于 2008-09-28 00:29 |
| 新手上路 发帖 4 积分 9 | |
|
高人大作,留个记号 简洁精练,值得学习,留着研究用
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |