标题: [已解决]取不同目录下文本文件的特定内容
[打印本页]
作者: bgwzlgf9610
时间: 2008-4-12 18:42
标题: [已解决]取不同目录下文本文件的特定内容

问题是这样的:某一文件夹下有几个文件夹,每一个子文件夹下有一个名如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 ]
作者: huahua0919
时间: 2008-4-12 19:03
type pfen.txt|findstr "姓名" >cj.txt||type pfen.log|findstr "姓名" >cj.txt
作者: terse
时间: 2008-4-12 21:03
@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
作者: 26933062
时间: 2008-4-12 21:59
楼主要求的是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 ]
作者: bgwzlgf9610
时间: 2008-4-13 07:26
坛子里的朋友真是太热心了!
真的是非常感谢,别的话也不多说了……
有了朋友们的这些提示,相信我会完成这个工作的!!!
再次表示感谢。
作者: bgwzlgf9610
时间: 2008-4-13 12:13
再一次麻烦大家,我的问题描述不对。用朋友们提供的方法都不能实现,在这里表示歉意。汗……
具体如下:
我的目录结构如下:
主目录→形如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 ]
作者: terse
时间: 2008-4-13 12:53
@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
作者: 26933062
时间: 2008-4-13 13:56
姓名 和 成绩 是不在一行上吗?
:
@echo off
set "var=findstr /is "姓名 成绩" pfen.txt pfen.log"
for /f "tokens=1* delims=:" %%a in ('%var%') do echo %%b
pause
作者: bgwzlgf9610
时间: 2008-4-13 16:39
按照朋友们的程序思路试了很多方法,还是不行,根本就没有任何内容可以记录到文本文件中,我已经将我要统计的目录结构上传了,地址如下:
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 ]
作者: bgwzlgf9610
时间: 2008-4-13 17:15
用参数/r来代替/f是否可以解决这个问题,我先试一下。
作者: 26933062
时间: 2008-4-13 18:06
楼主的问题一变再变,
暂不关注此帖。
作者: bgwzlgf9610
时间: 2008-4-13 18:29
还是不行,弄得头都大了,先休息一下吧。
先谢谢各位朋友了
作者: moniuming
时间: 2008-4-13 18:59
没测试
@echo off
for /f "delims=" %%i in ('dir /s/b/a-d "d:\pfen.log"') do (
type "%%i"|findstr "姓名 成绩">>"d:\chengji.txt"
)
pause