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

[文本处理] [已解决]批处理指定文本内随机提取内容再插入txt的处理

[复制链接]
发表于 2011-11-27 12:02:37 | 显示全部楼层 |阅读模式
本帖最后由 fanfande 于 2011-11-30 00:27 编辑

在 a.txt 内每行文字不一样,如下所示:
  1. 这是第1行的文字
  2. 这是第2行的文字
  3. 这是第3行的文字
  4. 这是第4行的文字
  5. ......N行文字
复制代码
在 与 a.txt 同一级别下有一个文件夹,文件夹内有N个txt

现在要用批处理实现:
读取 a.txt的内容 并随机提前一行随机插入到 文件夹内的txt里面(任何地方都可以)!
并将新的生成结果导入到新的文件夹内!

小弟不才,学批处理,止步于for ,纠结与random,转在里面转不出来了~ 特来求救,谢谢大家

评分

参与人数 1PB +2 收起 理由
CrLf + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-11-27 16:00:35 | 显示全部楼层
批处理不是万能的,而对文本内容处理方面似乎正是它的弱项
发表于 2011-11-27 16:11:08 | 显示全部楼层
回复 2# 601997526


但是BAT解决楼主的问题似乎不难啊
发表于 2011-11-27 17:23:52 | 显示全部楼层
回复 3# awk


    刚没看清楚,还以为又是那种小说里面加广告的那种
 楼主| 发表于 2011-11-27 22:02:37 | 显示全部楼层
回复 4# 601997526


    你好,可以帮我看下吗,谢谢
发表于 2011-11-27 23:43:55 | 显示全部楼层
本帖最后由 yyykkkyyyy 于 2011-11-27 23:50 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set sd=源文件夹
  3. set dd=新文件夹
  4. md "%dd%" 2>nul
  5. (for /f "delims=" %%i in (a.txt)do echo !random!-%%i)>a.txt.yky
  6. for /f "tokens=1* delims=-" %%i in ('sort a.txt.yky')do (
  7.   set/a n0+=1&set #!n0!=%%j)
  8. del a.txt.yky
  9. for /f "delims=" %%i in ('dir/b/a-d "%sd%\*.txt"')do (
  10.   set/a "m+=1,mm=m%%n0+1"
  11.   echo !m!        %%i
  12.   for /f "tokens=2 delims=:" %%a in ('find /c /v "" "%sd%\%%i"')do set/a n=%%a+1
  13.   set/a "rn=!random!%%n+1"
  14.   (for /f "tokens=1* delims=:" %%b in ('findstr/n .* "%sd%\%%i"')do (
  15.     if %%b==!rn! set n=0&call echo.%%#!mm!%%
  16.     echo.%%c)
  17.   if !n! neq 0 call echo.%%#!mm!%%)>"%dd%\%%i"
  18. )
  19. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

发表于 2011-11-28 00:23:09 | 显示全部楼层

  1. @set @n=0//&cscript.exe -e:jscript "%~f0"&exit /b

  2. folder1 = "txt所在文件夹";
  3. folder2 = "新的文件夹";
  4. info = "a.txt";

  5. fso = new ActiveXObject("Scripting.FileSystemObject");
  6. fc = new Enumerator(fso.GetFolder(folder1).files);
  7. files = [];
  8. for (i=0; !fc.atEnd(); fc.moveNext()) {
  9.     fp = fc.item().Path;
  10.     if (/\.txt$/i.test(fp)) files[i++] = fp;
  11. }
  12. texts = fso.OpenTextFile(info).ReadAll().split("\r\n");
  13. if (!fso.FolderExists(folder2)) fso.CreateFolder(folder2);
  14. for (i=0; i<files.length; i++)
  15. {
  16.     s = fso.OpenTextFile(files[i]).ReadAll();
  17.     rndpos = parseInt(Math.random() * s.length);
  18.     rndtxt = texts[parseInt(Math.random() * texts.length)];
  19.     s = s.slice(0,rndpos) + rndtxt + s.slice(rndpos);
  20.     fso.OpenTextFile(folder2+'\\'+files[i].replace(/^.*\\/,'')).write(s));
  21. }
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-11-28 15:47:38 | 显示全部楼层
回复 7# powerbat

首先请问power你这个是vbs是吗
我测试了一下
360好像阻止了一个什么东西,运行下来有错误,我特地截图发来!
发表于 2011-11-28 19:42:01 | 显示全部楼层
看到第一行,你竟然还能把它看成vbs?
 楼主| 发表于 2011-11-28 23:58:32 | 显示全部楼层
回复 9# powerbat


    老大你好,我运行没能成功,小弟不才啊
保存为bat,运行下来一闪而过
发表于 2011-11-29 22:09:38 | 显示全部楼层
在exit /b前面加个pause
@set @n=0//&cscript.exe -e:jscript "%~f0"&pause&exit /b
把出错信息贴上来。
 楼主| 发表于 2011-11-29 23:37:01 | 显示全部楼层
回复 11# powerbat

提示缺少一个分号
发表于 2011-11-29 23:49:14 | 显示全部楼层
本帖最后由 powerbat 于 2011-11-29 23:53 编辑

22行改成
    fso.OpenTextFile(folder2+'\\'+files.replace(/^.*\\/,''), 2, true).write(s);
发表于 2011-11-29 23:51:31 | 显示全部楼层
如何在CMD中使用复制粘贴功能
http://www.bathome.net/thread-9963-1-1.html
发表于 2011-11-29 23:55:56 | 显示全部楼层
怎么像是论坛吃字符了?

评分

参与人数 1技术 +1 收起 理由
fanfande + 1 谢谢你(⊙o⊙)

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 16:03 , Processed in 0.024701 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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