中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]取不同目录下文本文件的特定内容
作者:
标题: [已解决]取不同目录下文本文件的特定内容 上一主题 | 下一主题
bgwzlgf9610
初级用户

我很想学DOS


积分 30
发帖 12
注册 2007-4-28
状态 离线
『楼 主』:  [已解决]取不同目录下文本文件的特定内容


问题是这样的:某一文件夹下有几个文件夹,每一个子文件夹下有一个名如pfen.txt或pfen.log的文本文件,里面的内容中有一行是“姓名=*** 成绩=***”,我想把这么内容都读出来,放到一个文本文件里,试了很长时间都不行,请高手帮帮忙,先谢谢了。
我只知道用以下语句读一个文件的内容:
for /f "tokens=2,3,4,5 delims=" %%a in(pfen.txt) do @echo %%~a %%~b %%~c %%~d >>chengji.txt
汗……

问题已经解决,今天上午开了一上午的会,没顾上看论坛。
再次向各位朋友的热心帮助表示感谢!!!
以下是moniuming朋友的代码,我下了后只做了简单的改动就OK了:
@echo off
type nul>"d:\chengji.txt"
for /f "delims=" %%i in ('dir /s/b/a-d "d:\pfen.log"') do (
for /f "delims=" %%j in ('findstr /i "姓名= 成绩=" "%%i"') do (
>>"d:\chengji.txt" echo %%j
)
)
type "d:\chengji.txt"
echo.&pause


修改后的代码如下,这就是我要的结果:
@echo off
type nul>"chengji.txt"
for /f "delims=" %%i in ('dir /s/b "pfen.log"') do (
for /f "delims=" %%j in ('findstr /i "姓名" "%%i"') do (
>>"chengji.txt" echo %%j
)
)
echo.&pause

[ Last edited by bgwzlgf9610 on 2008-4-15 at 02:26 PM ]

2008-4-12 18:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 2 楼』:  


type pfen.txt|findstr "姓名" >cj.txt||type pfen.log|findstr "姓名" >cj.txt


2008-4-12 19:03
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 3 楼』:  

@echo off
for /f "delims=" %%i in ('dir /b /s "某一文件夹下\pfen.txt"') do (
    for /f "delims=" %%a in ('findstr /i "姓名=" "%%i"') do echo/%%a
)
pause



简单!简单!再简单!
2008-4-12 21:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 4 楼』:  

楼主要求的是pfen.txt 或pfen.log文件,含子目录,
findstr 本身就提供了这个功能,不需要使用管道,只需用for过滤掉文件名即可。
:
@echo off
set "var=findstr /isc:"姓名=" pfen.txt pfen.log"
for /f "tokens=1* delims=:" %%a in ('%var%') do echo %%b
pause
[ Last edited by 26933062 on 2008-4-12 at 10:03 PM ]



致精致简!
2008-4-12 21:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bgwzlgf9610
初级用户

我很想学DOS


积分 30
发帖 12
注册 2007-4-28
状态 离线
『第 5 楼』:  

坛子里的朋友真是太热心了!
真的是非常感谢,别的话也不多说了……
有了朋友们的这些提示,相信我会完成这个工作的!!!
再次表示感谢。

2008-4-13 07:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bgwzlgf9610
初级用户

我很想学DOS


积分 30
发帖 12
注册 2007-4-28
状态 离线
『第 6 楼』:  

再一次麻烦大家,我的问题描述不对。用朋友们提供的方法都不能实现,在这里表示歉意。汗……
具体如下:
我的目录结构如下:
主目录→形如k01、k02、k03……k60等这样的目录→在以上每一个目录下又有好多形如601030700***这样的目录→在这样的目录,每一个里面都有pfen.txt或penf.log这样的文本文件,我想把这里面的姓名、成绩这一行的内容都读到一个文本文件里。

这回应该清楚了,再一次表示歉意,让大家做了很多无用功。
我的设计思路:
先用循环转到k01这样的目录里,再在所有的子目录里找pfen.tx或tpfen.log这样的文本文件,读出里面需要的内容,放在根目录下一个文本文件里。重复60遍就可以了。具体的批处理文件内容,由于本人水平有限就不放在这里现眼了。

[ Last edited by bgwzlgf9610 on 2008-4-13 at 12:23 PM ]

2008-4-13 12:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 7 楼』:  

@echo off
for /f "delims=" %%i in ('findstr /mis "姓名=" pfen.txt pfen.log') do (
    for /f "delims=" %%a in ('findstr /i "姓名=" ".\%%i"') do >>目录根文件.txt echo/%%a
)
pause



简单!简单!再简单!
2008-4-13 12:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 8 楼』:  

姓名 和 成绩 是不在一行上吗?
:
@echo off
set "var=findstr /is "姓名 成绩" pfen.txt pfen.log"
for /f "tokens=1* delims=:" %%a in ('%var%') do echo %%b
pause




致精致简!
2008-4-13 13:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bgwzlgf9610
初级用户

我很想学DOS


积分 30
发帖 12
注册 2007-4-28
状态 离线
『第 9 楼』:  

按照朋友们的程序思路试了很多方法,还是不行,根本就没有任何内容可以记录到文本文件中,我已经将我要统计的目录结构上传了,地址如下:
http://upload.cn-dos.net/img/264.txt
我要做的就是将每一个考生目录下的pfen.log里,有一行是显示考生信息和成绩的保存到当前根目录下的"cj.txt"里。
具体如下:
1、自动进到k01,然后到该目录下查找601030700***、601030700***等这样的考生目录下的pfen.log里的考生信息和成绩,放到根目录下的"cj.txt"里;
2、再自动进到k02,重复以上步骤,直到全部60个目录统计完成。
说明:
k01~k60是服务器上建的60台学生机的工作目录,每个目录下的601030700***这样的目录是学生在相应学生机上考试时用的考号自动建立的目录,如k01\601030700123就表示k01这台计算机上,考号是601030700123的考生的工作目录,而k01\601030700456则表示k01这台计算机上,考号是601030700456的考生的工作目录
真的麻烦朋友们了,明天就要统计结果,我要是一个目录一个目录地统计,肯定完成不了任务。
又得挨领导批评了


刚看了目录结构发现,我弄错了,成绩只用pfen.log记录,没有pfeng.txt,再次表示歉意。

[ Last edited by bgwzlgf9610 on 2008-4-13 at 04:42 PM ]

2008-4-13 16:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bgwzlgf9610
初级用户

我很想学DOS


积分 30
发帖 12
注册 2007-4-28
状态 离线
『第 10 楼』:  

用参数/r来代替/f是否可以解决这个问题,我先试一下。

2008-4-13 17:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 11 楼』:  

楼主的问题一变再变,
暂不关注此帖。



致精致简!
2008-4-13 18:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bgwzlgf9610
初级用户

我很想学DOS


积分 30
发帖 12
注册 2007-4-28
状态 离线
『第 12 楼』:  

还是不行,弄得头都大了,先休息一下吧。
先谢谢各位朋友了

2008-4-13 18:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 13 楼』:  

没测试
@echo off
for /f "delims=" %%i in ('dir /s/b/a-d "d:\pfen.log"') do (
type "%%i"|findstr "姓名 成绩">>"d:\chengji.txt"
)
pause


2008-4-13 18:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: