脚本编程(语言不限,最好不用编译):实现遍历某个目录所有文件的文件名,将所要查找的信息输出到文本文件

实现遍历某个目录所有文件的文件名,将所要查找的信息输出到文本文件中。比如,我想要统计一下一个目录中所有含有FRA字符的文件的名称和总数。要把结果输出写在一个TXT或者EX... 实现遍历某个目录所有文件的文件名,将所要查找的信息输出到文本文件中。比如,我想要统计一下一个目录中所有含有FRA字符的文件的名称和总数。
要把结果输出写在一个TXT或者EXCEL中,以便其他程序使用。
最好是脚本语言 编写的,其他静态语言编译好的EXE文件也可以。
高手指教!!
展开
 我来答
和硕裕亲王福全
2012-01-16 · TA获得超过144个赞
知道答主
回答量:187
采纳率:0%
帮助的人:184万
展开全部

我来写个autoit 脚本吧 (autoit 3.3.6.1 汉化版 winxp home sp3 环境 编译运行通过)

来个效果图

一下是源代码

$dir = "D:\h"    ;需要查找的路径

$str = search($dir)        ;调用search函数查找路径

$arr = StringSplit($str, "|")    ;将search函数返回的字符串拆分成数组,数组元素就是一个文件的完整路径

$file = $arr    ;把数组arr复制给file使file成为和arr相同大小的数组,目的只是为了构造相同大小的数组

$j = 1

;循环把 数组arr中

For $i = 1 To $arr[0]

    $p = StringInStr($arr[$i], "\", 0, -1)    ;从路径尾部向前找到路径分割符"\"在字符串中的位置

    $filename = StringMid($arr[$i], $p+1)    ;截取文件名

    ;如果文件名中包含字符串FRA,则将其复制到数组file中

    If StringInStr($filename, "FRA", 0) Then

        $file[$j] = $arr[$i]

        $j += 1

    EndIf

Next

$n = $j - 1    ;循环结束后j-1的值就是含FRA的文件的个数

;buf字符串的内容将会用来写入文件

$buf = "总共找到文件个数:" & $n & " 个" &@CRLF

;循环将数组file中的路径拼接到buf上

For $j = 1 To $n

    $buf &= $file[$j] & @CRLF

Next

;在脚本所在目录创建统计报告.txt

$fp = FileOpen(@ScriptDir & "\统计报告.txt", 10)

FileWrite($fp, $buf)    ;把buf的内容写入统计报告.txt

FileClose($fp)    ;关闭fileopen函数打开的文件

Run(@WindowsDir & "\Notepad.exe " & @ScriptDir & "\统计报告.txt", "");用启动记事本打开生成的文件

;递归查找函数,递归查找*.*,支持子目录,以字符串形式返回所有文件的路径

;各路径之间用 竖线“|”隔开

Func search($path)

    $ret = ""

    $handle = FileFindFirstFile($path & "\*.*")

    If $handle = -1 Then Return $ret

    While 1

        $file = FileFindNextFile($handle)

        If @error Then ExitLoop

        If @extended Then

            $tmp = search($path & "\" & $file)

        Else

            $tmp = $path & "\" & $file

        EndIf

        If $tmp <> "" Then

            If $ret = "" Then

                $ret = $tmp

            Else

                $ret = $ret & "|" & $tmp

            EndIf

        EndIf

    WEnd

    Return $ret

EndFunc

更多追问追答
追问
如果需求由一个变成两个或者多个,该如何写?
比如,要查找含有FRA和JPN(或者还有第三、四个目标)的文件名各有多少个,并查找结果按FRA和JPN各自列出结果的路径。
追答
终于改出来啦,可以查找多个关键字
代代码太长 超过字数限制 想要 请要留 e-mail
来个效果图
艺术创想_Lee
2012-01-16 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:97
采纳率:0%
帮助的人:85.5万
展开全部
用批处非常简单,代码如下:
@echo off
echo 运前之前把我先放到要处理的目录下
pause
for %%i in (*.*) do echo %%i >>tmp_不含子文件夹.txt
pause
for /r %%i in (*.*) do echo %%i >>tmp_含子文件夹.txt
exit

运行结果是把
第一个文本文件把当前目录下文件名分行记录在里面
第二个文本文件把当前目录及所有子目录下文件的绝对路径分行记录在里面

可以把上面代码复制到文件本文件,改扩展名为CMD或BAT ,可或者以另存的方式存为批处理

上面如果要遍历所有子目录里文件太多的话,那执行会有点慢,生成的文本也较大,
追问
如果需求由一个变成两个或者多个,该如何写?
比如,要查找含有FRA和JPN(或者还有第三、四个目标)的文件名各有多少个,并查找结果按FRA和JPN各自列出结果的路径。
追答
处理需要可以是任意有限个,根据你的需要,代码如下
@echo off
echo 运前之前把我先放到要处理的目录下
pause
for %%i in (*FRA*.*,*JPN*.*,*.*) do echo %%i >>tmp_不含子文件夹.txt
pause
for /r %%i in ((*FRA*.*,*JPN*.*,*.*) do echo %%i >>tmp_含子文件夹.txt
exit

如果不需要遍历所有子目录的话,第2句for 语句可以删去
如果不需要在所有文件中搜索的话,可以将for语句括号里最后一逗号和"*.*"删去
找不到文件时,不会有文本生成
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
naletive
2012-01-09 · TA获得超过1021个赞
知道小有建树答主
回答量:195
采纳率:0%
帮助的人:138万
展开全部
#!/usr/bin/perl
my $dir = $ARGV[0];
my $dst = $ARGV[0];

if (!defined $dir){
print "缺少参数!\n";
exit(-1);
}
if (!-d $dir){
print "$dir不是可用的目录\n";
exit(-1);
}

my $content;
if (!opendir DIR,"$dir"){
print "打开目录失败:$dir\n";
eixt(-1);
}
else{
foreach (readdir DIR){
$content .= "$_\n";
}
closedir DIR;
}

if (!open FILE,">$dst"){
print "写文件失败!\n";
exit(-1);
}
else{
print FILE $content;
close FILE;
}
print "succeed!\n";
exit(0);

#程序名:ScanFolder.pl
上面这个是perl脚本,要求你的系统有perl环境(windows下可以装个straberryperl),不需要编译。
运行示例(linux系统):
perl ScanFolder.pl '/home/user/bin/' '/home/user/dst.txt'
第一个参数是你要解析的目录,第二个参数是你要输出的txt文件。这里不能用.xls做目标文件,具体原因可以追问。
更多追问追答
追问
谢谢你的回到,我没接触过Perl语言,但我会亲自去试试;
还有,我想借此机会,就此发散一下,看看每种言语都是如何实现的;或者看看谁的方法比较好
或者想继续改进一下,将功能更完善。

但是,貌似很少人关注我的这个问题,至少到现在是这样。
追答
恩,好的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hong7204
2012-01-18 · TA获得超过9957个赞
知道大有可为答主
回答量:7787
采纳率:68%
帮助的人:3949万
展开全部
<script>
function Show_Text(){

var a = document.getElementById("a")//获取要显示文字的元素
var a_str= document.all ? a.innerText : a.textContent;//判断是IE或FF
a.innerHTML += str_arr[a_str.length];
if(a_str.length==7)clearInterval(Move_Text);}
Move_Text = setInterval(Show_Text,15000);
</script>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式