中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-08 01:44
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]取不同目录下文本文件的特定内容 查看 4,223 回复 12
楼 主 [已解决]取不同目录下文本文件的特定内容 发表于 2008-04-12 18:42 ·  中国 内蒙古 包头 联通
初级用户
我很想学DOS
积分 30
发帖 12
注册 2007-04-28 04:32
19年会员
UID 86736
性别 男
状态 离线

问题是这样的:某一文件夹下有几个文件夹,每一个子文件夹下有一个名如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 ]
2 发表于 2008-04-12 19:03 ·  中国 江苏 苏州 电信
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线

type pfen.txt|findstr "姓名" >cj.txt||type pfen.log|findstr "姓名" >cj.txt
3 发表于 2008-04-12 21:03 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
@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
简单!简单!再简单!
4 发表于 2008-04-12 21:59 ·  中国 湖南 长沙 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
楼主要求的是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 ]
致精致简!
5 发表于 2008-04-13 07:26 ·  中国 内蒙古 包头 联通
初级用户
我很想学DOS
积分 30
发帖 12
注册 2007-04-28 04:32
19年会员
UID 86736
性别 男
状态 离线
坛子里的朋友真是太热心了!
真的是非常感谢,别的话也不多说了……
有了朋友们的这些提示,相信我会完成这个工作的!!!
再次表示感谢。
6 发表于 2008-04-13 12:13 ·  中国 内蒙古 包头 联通
初级用户
我很想学DOS
积分 30
发帖 12
注册 2007-04-28 04:32
19年会员
UID 86736
性别 男
状态 离线
再一次麻烦大家,我的问题描述不对。用朋友们提供的方法都不能实现,在这里表示歉意。汗……
具体如下:
我的目录结构如下:
主目录→形如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 ]
7 发表于 2008-04-13 12:53 ·  中国 江苏 常州 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
@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
简单!简单!再简单!
8 发表于 2008-04-13 13:56 ·  中国 湖南 长沙 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
姓名 和 成绩 是不在一行上吗?
:

@echo off
set "var=findstr /is "姓名 成绩" pfen.txt pfen.log"
for /f "tokens=1* delims=:" %%a in ('%var%') do echo %%b
pause

致精致简!
9 发表于 2008-04-13 16:39 ·  中国 内蒙古 包头 联通
初级用户
我很想学DOS
积分 30
发帖 12
注册 2007-04-28 04:32
19年会员
UID 86736
性别 男
状态 离线
按照朋友们的程序思路试了很多方法,还是不行,根本就没有任何内容可以记录到文本文件中,我已经将我要统计的目录结构上传了,地址如下:
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 ]
10 发表于 2008-04-13 17:15 ·  中国 内蒙古 包头 联通
初级用户
我很想学DOS
积分 30
发帖 12
注册 2007-04-28 04:32
19年会员
UID 86736
性别 男
状态 离线
用参数/r来代替/f是否可以解决这个问题,我先试一下。
11 发表于 2008-04-13 18:06 ·  中国 湖南 长沙 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
楼主的问题一变再变,
暂不关注此帖。
致精致简!
12 发表于 2008-04-13 18:29 ·  中国 内蒙古 包头 联通
初级用户
我很想学DOS
积分 30
发帖 12
注册 2007-04-28 04:32
19年会员
UID 86736
性别 男
状态 离线
还是不行,弄得头都大了,先休息一下吧。
先谢谢各位朋友了
13 发表于 2008-04-13 18:59 ·  中国 广西 中移铁通
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
18年会员
UID 103929
性别 男
来自 广西
状态 离线
没测试

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