标题: [文件操作] [已解决]如何提取和替换文本指定特征的字符并以这些字符匹配文件名来对文本进行归类? [打印本页]
作者: xp3000 时间: 2016-4-5 08:41 标题: [已解决]如何提取和替换文本指定特征的字符并以这些字符匹配文件名来对文本进行归类?
本帖最后由 xp3000 于 2016-4-6 13:54 编辑
如何bat+jscript提取文本字符串新建文件夹、替换文本,根据提取字符串列表对比文件名,移动文件名含提取字符串的文件到文件夹
有大量TXT文件,文件有可能是UTF-8或ANSI编码,
1、提取所有文本内容第*卷信息,并且输出到:统计.log,
比如第*卷为第一卷,第一五卷,第二六卷...第卅卷,这个后面用来新建文件夹用,
2、用正则表达式将第(中文数字)(中文数字)卷替换为第(中文数字)十(中文数字)卷,
第卅卷替换为第三十卷,同时第*卷前面的 替换为空值,
例如:
第一五卷
替换
第一十五卷
……
第卅卷
替换
第三十卷
3、根据统计.log里面关键字新建文件夹,这时候新建的文件夹第一五卷...第二六卷...第卅卷……
4、然后将文件名中含关键字的TXT,移动到各自分类的文件夹里面去。
比如:
文件名含“第一卷”字符串,将他们移动到第一卷文件夹里面去,文件名含“第二卷”,将他们移动到第二卷文件夹里面去
作者: pcl_test 时间: 2016-4-5 13:00
“提取所有文件第*卷信息”指定是文件名中的还是文本内容里面的?替换的又是文件名中的还是文本内容里面的?
作者: happy886rr 时间: 2016-4-5 13:15
回复 1# xp3000
看不懂你的描述,无法理解的句子。
作者: xp3000 时间: 2016-4-5 15:26
回复 3# happy886rr
提取文本内容里面的字符串
作者: pcl_test 时间: 2016-4-6 00:24
本帖最后由 pcl_test 于 2016-4-6 00:29 编辑
猜- <!-- :
- @echo off
- for /f "delims=" %%a in ('dir /a-d/b *.txt^|mshta "%~f0"') do (
- if exist "*%%a*.txt" (
- md "%%a\" 2>nul
- move "*%%a*.txt" "%%a\"
- )
- )
- pause&exit
- -->
-
- <script src=http://www.bathome.net/lib/diy/hide.js></script>
- <script src=http://www.bathome.net/lib/diy/iconv.js></script>
-
- <script>
- var fso = new ActiveXObject('Scripting.Filesystemobject');
- var StdIn = fso.GetStandardStream(0);
- var StdOut = fso.GetStandardStream(1);
- var txtfiles = StdIn.ReadAll().split(/\r\n/);
- var log = fso.CreateTextFile('统计.log', 2);
- var s = f = '', arr = {};
-
- for(var i = 0; i<txtfiles.length; i++){
- var bin = iconv.load(txtfiles[i]);
- var bom = iconv.checkBom(bin);
- if(bom == 'undefined'){bom = iconv.toStr(bin, 'gb2312')?'gb2312':'utf-8';}
- var txt = iconv.toStr(bin, bom);
- var t = '';
- var str = txt.replace(/[ \t]*(第[零一二三四五六七八九十百千廿卅卌]+?卷)/g, function($0, $1){
- if(!arr[$1]){
- arr[$1] = 1;
- f += $1 +'\r\n';
- }
- t += $1 +',';
- var r = $1.replace(/[廿卅卌]/, function(a){return a=='廿'?'二十':a=='卅'?'三十':'四十'});
- return /第[一二三四五六七八九]{2}卷/.test(r)?r.substr(0, 2)+ '十' +r.substr(2, 2):r;
- });
- iconv.saveText(str, txtfiles[i], bom);
- s += fso.GetFile(txtfiles[i]).Name+ '\r\n' +t+ '\r\n\r\n';
- }
-
- log.Write(s);
- StdOut.Write(f);
- </script>
复制代码
作者: xp3000 时间: 2016-4-6 02:59
打雷学习中,下午打雷断电了,看懂一部分,刚开始能,后来不能了,不知道为什么失效了,
还有两个问题,如果提取的第*卷信息,不管有多少个,统计.log只统计一次,
也就是第一卷到第卅卷有三十个,重复或不重复的,在统计.log里面只列出他们三十行,修改哪里?
如果是只提取文件名的第*卷信息,并且输出到:统计.log
修改哪里?
作者: pcl_test 时间: 2016-4-6 08:25
去重
……
if(!arr[$1]){
arr[$1] = 1;
f += $1 +'\r\n';
t += $1 +',';
}
//t += $1 +',';
……
作者: pcl_test 时间: 2016-4-6 08:37
提取文件名指定特征的字符串- //&cls&(dir /a-d/b *.txt)|cscript -nologo -e:jscript "%~f0"&pause&exit
- WSH.echo(WSH.StdIn.ReadAll().match(/第[零一二三四五六七八九十百千廿卅卌]+?卷/g).join('\r\n'));
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |