Board logo

标题: [文本处理] [已解决]批处理指定文本内随机提取内容再插入txt的处理 [打印本页]

作者: fanfande    时间: 2011-11-27 12:02     标题: [已解决]批处理指定文本内随机提取内容再插入txt的处理

本帖最后由 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,转在里面转不出来了~ 特来求救,谢谢大家
作者: 601997526    时间: 2011-11-27 16:00

批处理不是万能的,而对文本内容处理方面似乎正是它的弱项
作者: awk    时间: 2011-11-27 16:11

回复 2# 601997526


但是BAT解决楼主的问题似乎不难啊
作者: 601997526    时间: 2011-11-27 17:23

回复 3# awk


    刚没看清楚,还以为又是那种小说里面加广告的那种
作者: fanfande    时间: 2011-11-27 22:02

回复 4# 601997526


    你好,可以帮我看下吗,谢谢
作者: yyykkkyyyy    时间: 2011-11-27 23:43

本帖最后由 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
复制代码

作者: powerbat    时间: 2011-11-28 00:23

  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. }
复制代码

作者: fanfande    时间: 2011-11-28 15:47

回复 7# powerbat

首先请问power你这个是vbs是吗
我测试了一下
360好像阻止了一个什么东西,运行下来有错误,我特地截图发来!
作者: powerbat    时间: 2011-11-28 19:42

看到第一行,你竟然还能把它看成vbs?
作者: fanfande    时间: 2011-11-28 23:58

回复 9# powerbat


    老大你好,我运行没能成功,小弟不才啊
保存为bat,运行下来一闪而过
作者: powerbat    时间: 2011-11-29 22:09

在exit /b前面加个pause
@set @n=0//&cscript.exe -e:jscript "%~f0"&pause&exit /b
把出错信息贴上来。
作者: fanfande    时间: 2011-11-29 23:37

回复 11# powerbat

提示缺少一个分号
作者: powerbat    时间: 2011-11-29 23:49

本帖最后由 powerbat 于 2011-11-29 23:53 编辑

22行改成
    fso.OpenTextFile(folder2+'\\'+files.replace(/^.*\\/,''), 2, true).write(s);
作者: powerbat    时间: 2011-11-29 23:51

如何在CMD中使用复制粘贴功能
http://www.bathome.net/thread-9963-1-1.html
作者: powerbat    时间: 2011-11-29 23:55

怎么像是论坛吃字符了?
作者: fanfande    时间: 2011-11-30 00:26

回复 13# powerbat


    谢谢你(⊙o⊙)我给你发了私人信息!
作者: 5209920    时间: 2012-2-5 10:45

解决了吗,为什么没看到解决后的bat发出来呢!




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