标题: [文本处理] 【已解决】批处理如何从多个文件夹里的每个txt文本中随机提取不重复的多行行内容? [打印本页]
作者: 1879362421a 时间: 2016-7-5 09:22 标题: 【已解决】批处理如何从多个文件夹里的每个txt文本中随机提取不重复的多行行内容?
本帖最后由 1879362421a 于 2016-7-6 11:20 编辑
我电脑里 d:\www\ 下有大约1000个文件夹,每个文件夹下大约有100个TXT。
我想每个TXT都随机抽取,不重复的N行(N可以自定义)。
最后把抽取出来的组合,合并成新的TXT。
昨天通过一整天的搜索,百度、批处理之家,谷歌,360等等。发现最好用的是
http://www.bathome.net/redirect. ... 2814&ptid=20850
超级版主 batman 写的
但他写的这个只能执行单个TXT,我没办法修改。我每次修改结果都是提示环境变量出错啥。
我的思路是,把所有TXT的路径,都写到了xxx.txt里,然后在上面的程序外面加个for。请路过的大侠帮忙看看。万谢!!
作者: WHY 时间: 2016-7-5 11:44
又是随机数
作者: 1879362421a 时间: 2016-7-5 11:50
回复 2# WHY
如果随机数难搞,你也可以帮我搞成每个TXT第5行至第20行内的数据都读取出来。拜托了!
作者: pcl_test 时间: 2016-7-5 15:50
本帖最后由 pcl_test 于 2016-7-5 19:00 编辑
- //&cls&dir /a-d/b *.txt|cscript -nologo -e:jscript "%~f0"&pause&exit
- var txt='', n=5; //指定随机抽取几行
- var fso=new ActiveXObject('Scripting.Filesystemobject');
- while(!WSH.StdIn.AtEndOfStream) {
- try{
- var s = fso.OpenTextFile(WSH.StdIn.ReadLine(), 1).ReadAll().split(/\r\n/).sort(function(){return Math.random()-.5});
- txt += s.slice(0, n).join('\r\n')+'\r\n';
- }catch(e){}
- }
- WSH.echo(txt);
复制代码
作者: 1879362421a 时间: 2016-7-5 16:08
本帖最后由 pcl_test 于 2016-7-5 16:24 编辑
回复 4# pcl_test
嗯谢谢您回帖,管理论坛辛苦了。 请问这个不是bat吧 ? 我测试了不能执行。
作者: pcl_test 时间: 2016-7-5 16:25
回复 5# 1879362421a
指定回应某楼层的在相应楼层点回复,少引用
报错么,显示什么?
直接保存为bat文件跟txt放一起运行
作者: 1879362421a 时间: 2016-7-5 16:39
回复 6# pcl_test
经过测试您写的程序完美执行,激动中又有一些小遗憾。因为您的代码我一个看不懂,我不能自己修改成自定义路径的TXT,还有生成出来的TXT位置。如:
if /f %%a in (d:\www\*.txt) do %%a>>d:\xxxx.txt
我只会改这种简单的代码。还望您抽出时间 帮我加上路径。万谢!
作者: pcl_test 时间: 2016-7-5 16:44
本帖最后由 pcl_test 于 2016-7-5 22:18 编辑
回复 7# 1879362421a
首行改为
/*&cls
@echo off
cd /d "d:\www\"
dir /a-d/b *.txt|cscript -nologo -e:jscript "%~f0">"d:\xxxx.txt"
pause&exit
*/
作者: 1879362421a 时间: 2016-7-5 17:06
回复 8# pcl_test
执行了提示:(8,15)编译错误:语法错误
路径为:C:\Users\Administrator\Desktop\ceshi\www1\*.txt
作者: 1879362421a 时间: 2016-7-5 17:16
本帖最后由 pcl_test 于 2016-7-5 18:57 编辑
奇怪了。
这个程序在服务器1执行,完美运行。服务器2提示:运行时错误:输入超出文件尾。
关于这个奇怪的问题,我认为可能是文件名有点的问题。因为服务器2文件名是xx.xxx.txt 类似的格式。而服务器1都是xx.txt
作者: pcl_test 时间: 2016-7-5 19:01
回复 10# 1879362421a
已改,不要重复贴码
作者: 1879362421a 时间: 2016-7-6 00:18
回复 11# pcl_test
作者: pcl_test 时间: 2016-7-6 00:37
回复 12# 1879362421a
自己不认真怪谁
作者: 1879362421a 时间: 2016-7-6 11:15
回复 13# pcl_test
请原谅我。我刚才今早花了很长时间,一个个字符对照。甚至重新复制了10余次您的代码,。。。。。还是不行!
作者: pcl_test 时间: 2016-7-6 11:20
本帖最后由 pcl_test 于 2016-7-6 11:23 编辑
回复 14# 1879362421a
明显错误WSH.echo(txt)>;
这就是你说的认真对了N次代码?
直接帮你整合4L、8L代码- /*&cls
- @echo off
- cd /d "d:\www\"
- dir /a-d/b *.txt|cscript -nologo -e:jscript "%~f0">"d:\xxxx.txt"
- pause&exit
- */
-
- var txt='', n=5; //指定随机抽取几行
- var fso=new ActiveXObject('Scripting.Filesystemobject');
- while(!WSH.StdIn.AtEndOfStream) {
- try{
- var s = fso.OpenTextFile(WSH.StdIn.ReadLine(), 1).ReadAll().split(/\r\n/).sort(function(){return Math.random()-.5});
- txt += s.slice(0, n).join('\r\n')+'\r\n';
- }catch(e){}
- }
- WSH.echo(txt);
复制代码
作者: 1879362421a 时间: 2016-7-6 11:24
已解决,感谢pcl_test ! 恩十分感谢。。。。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |