找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 66278|回复: 15

[文本处理] 【已解决】批处理如何从多个文件夹里的每个txt文本中随机提取不重复的多行行内容?

[复制链接]
发表于 2016-7-5 09:22:23 | 显示全部楼层 |阅读模式
本帖最后由 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。请路过的大侠帮忙看看。万谢!!

评分

参与人数 1PB -3 收起 理由
pcl_test -3 未按版规发帖

查看全部评分

发表于 2016-7-5 11:44:44 | 显示全部楼层
又是随机数
 楼主| 发表于 2016-7-5 11:50:32 | 显示全部楼层
回复 2# WHY


    如果随机数难搞,你也可以帮我搞成每个TXT第5行至第20行内的数据都读取出来。拜托了!
发表于 2016-7-5 15:50:25 | 显示全部楼层
本帖最后由 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);
复制代码
 楼主| 发表于 2016-7-5 16:08:36 | 显示全部楼层
本帖最后由 pcl_test 于 2016-7-5 16:24 编辑

回复 4# pcl_test


   嗯谢谢您回帖,管理论坛辛苦了。 请问这个不是bat吧 ?  我测试了不能执行。
发表于 2016-7-5 16:25:34 | 显示全部楼层
回复 5# 1879362421a
指定回应某楼层的在相应楼层点回复,少引用
报错么,显示什么?
直接保存为bat文件跟txt放一起运行
 楼主| 发表于 2016-7-5 16:39:20 | 显示全部楼层
回复 6# pcl_test


    经过测试您写的程序完美执行,激动中又有一些小遗憾。因为您的代码我一个看不懂,我不能自己修改成自定义路径的TXT,还有生成出来的TXT位置。如:

if /f %%a in (d:\www\*.txt) do %%a>>d:\xxxx.txt

我只会改这种简单的代码。还望您抽出时间 帮我加上路径。万谢!
发表于 2016-7-5 16:44:25 | 显示全部楼层
本帖最后由 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
*/
 楼主| 发表于 2016-7-5 17:06:39 | 显示全部楼层
回复 8# pcl_test


    执行了提示:(8,15)编译错误:语法错误


路径为:C:\Users\Administrator\Desktop\ceshi\www1\*.txt
 楼主| 发表于 2016-7-5 17:16:46 | 显示全部楼层
本帖最后由 pcl_test 于 2016-7-5 18:57 编辑

奇怪了。

这个程序在服务器1执行,完美运行。服务器2提示:运行时错误:输入超出文件尾。

关于这个奇怪的问题,我认为可能是文件名有点的问题。因为服务器2文件名是xx.xxx.txt 类似的格式。而服务器1都是xx.txt

评分

参与人数 1PB -2 收起 理由
pcl_test -2 勿重复贴码

查看全部评分

发表于 2016-7-5 19:01:21 | 显示全部楼层
回复 10# 1879362421a


    已改,不要重复贴码
 楼主| 发表于 2016-7-6 00:18:31 | 显示全部楼层
回复 11# pcl_test
发表于 2016-7-6 00:37:40 | 显示全部楼层
回复 12# 1879362421a


    自己不认真怪谁
 楼主| 发表于 2016-7-6 11:15:23 | 显示全部楼层
回复 13# pcl_test


    请原谅我。我刚才今早花了很长时间,一个个字符对照。甚至重新复制了10余次您的代码,。。。。。还是不行!
发表于 2016-7-6 11:20:18 | 显示全部楼层
本帖最后由 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);
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 15:20 , Processed in 0.023454 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表