Board logo

标题: [文本处理] BAT如何处理多个文件并以一定规则的文件名保存? [打印本页]

作者: lwplovely    时间: 2013-5-22 20:54     标题: BAT如何处理多个文件并以一定规则的文件名保存?

小弟只会简单的正则表达式,对批处理完全不懂,看不懂论坛代码,还望前辈见谅!

现在,需要对一个文件夹中100个txt文件进行同样处理,并以一定规则的文件名保存。
例如,原文件名是FILE.txt,
处理(1):对FILE.txt文件处理后,保存为FILE_Co_PM.txt;
处理(2):对FILE_Co_PM.txt处理后,保存为FILE_NV_list.txt;
处理(3):对FILE_NV_list.txt处理后,保存为FILE_NV_list_freq.txt.

希望各位老师不吝赐教。

具体例子如下:

(1)
perl -pe 's/(?:\S+| )\t(\S+)\t(??:\S*?| ),){7}(\S+?| ),.*/\n\2_\1/g' BD.txt |perl -pe 's/.*,.*//g;s/.*EOS.*//g;s/^\n//g;'  > BD_Co_PM.txt

(2)
perl -pe 's/\n/\t/g;s/。_補助記号-句点\t/。_補助記号-句点\n/g;' BD_Co_PM.txt | perl -pe 's/^\s*//g'  > BD_NV_list.txt

(3)
sort BD4KW_NV_list.txt | uniq -c | sort -rn | perl -pe 's/[0-9]{1,}\s.*を為る//g;' |          perl -pe 's/^\s*//g' > BD4KW_NV_list_freq.txt
作者: tmplinshi    时间: 2013-5-22 22:12

本帖最后由 tmplinshi 于 2013-5-22 22:23 编辑
@echo off
for /f "delims=" %%a in (' dir /b *.txt ') do (
        echo --^> %%a
        perl -pe "s/(?:\S+| )\t(\S+)\t(??:\S*?| ),){7}(\S+?| ),.*/\n\2_\1/g" "%%a" | perl -pe "s/.*,.*//g;s/.*EOS.*//g;s/^\n//g;"  > "%%~na_Co_PM.txt"
        perl -pe "s/\n/\t/g;s/。_補助記号-句点\t/。_補助記号-句点\n/g;" "%%~na_Co_PM.txt" | perl -pe "s/^\s*//g"  > "%%~na_NV_list.txt"
        sort "%%~na_NV_list.txt" | uniq -c | sort -rn | perl -pe "s/[0-9]{1,}\s.*を為る//g;" | perl -pe "s/^\s*//g" > "%%~na_NV_list_freq.txt"
)


Windows 下没有 uniq,sort 也不一样,这个情况不知道你是否知道。这些工具可以到 http://sourceforge.net/projects/unxutils/ 这个网站下载。
作者: Batcher    时间: 2013-5-22 22:20

既然你懂Perl和正则,那就在Windows里面搭建一个Perl环境吧。
http://www.bathome.net/thread-12483-1-1.html
作者: lwplovely    时间: 2013-5-23 09:34

回复 2# tmplinshi

版主,您好!一开始的解释不足,产生误会,实在不好意思。
我在mac或者linux环境下运行,因为数据量很大,win容易死机。
作者: lwplovely    时间: 2013-5-23 09:36

回复 3# Batcher

管理员,您好!谢谢您的回帖,win下我使用的是cygwin,目前来看还算好用,有时间研究一下您介绍的环境。
作者: tmplinshi    时间: 2013-5-23 10:37

回复 4# lwplovely


2 楼的批处理符合你的要求吗?
作者: lwplovely    时间: 2013-5-23 14:55

回复 6# tmplinshi

我运行一下试试哈!
作者: xxpinqz    时间: 2013-5-23 16:23

感慨下:亚历山大!
天书啊




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2