Board logo

标题: [文本处理] 【已解决】批处理如何从多个文件夹里的每个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 编辑
  1. //&cls&dir /a-d/b *.txt|cscript -nologo -e:jscript "%~f0"&pause&exit
  2. var txt='', n=5; //指定随机抽取几行
  3. var fso=new ActiveXObject('Scripting.Filesystemobject');
  4. while(!WSH.StdIn.AtEndOfStream) {
  5.     try{
  6.         var s = fso.OpenTextFile(WSH.StdIn.ReadLine(), 1).ReadAll().split(/\r\n/).sort(function(){return Math.random()-.5});
  7.         txt += s.slice(0, n).join('\r\n')+'\r\n';
  8.     }catch(e){}
  9. }
  10. 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代码
  1. /*&cls
  2. @echo off
  3. cd /d "d:\www\"
  4. dir /a-d/b *.txt|cscript -nologo -e:jscript "%~f0">"d:\xxxx.txt"
  5. pause&exit
  6. */
  7. var txt='', n=5; //指定随机抽取几行
  8. var fso=new ActiveXObject('Scripting.Filesystemobject');
  9. while(!WSH.StdIn.AtEndOfStream) {
  10.     try{
  11.         var s = fso.OpenTextFile(WSH.StdIn.ReadLine(), 1).ReadAll().split(/\r\n/).sort(function(){return Math.random()-.5});
  12.         txt += s.slice(0, n).join('\r\n')+'\r\n';
  13.     }catch(e){}
  14. }
  15. WSH.echo(txt);
复制代码

作者: 1879362421a    时间: 2016-7-6 11:24

已解决,感谢pcl_test ! 恩十分感谢。。。。




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