[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理指定文本内随机提取内容再插入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,转在里面转不出来了~ 特来求救,谢谢大家
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2
有创新,多创新;无创新,多模仿;无模仿,多坚持

批处理不是万能的,而对文本内容处理方面似乎正是它的弱项

TOP

回复 2# 601997526


但是BAT解决楼主的问题似乎不难啊

TOP

回复 3# awk


    刚没看清楚,还以为又是那种小说里面加广告的那种

TOP

回复 4# 601997526


    你好,可以帮我看下吗,谢谢
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

本帖最后由 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

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

  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

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

回复 7# powerbat

首先请问power你这个是vbs是吗
我测试了一下
360好像阻止了一个什么东西,运行下来有错误,我特地截图发来!
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

看到第一行,你竟然还能把它看成vbs?

TOP

回复 9# powerbat


    老大你好,我运行没能成功,小弟不才啊
保存为bat,运行下来一闪而过
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

在exit /b前面加个pause
@set @n=0//&cscript.exe -e:jscript "%~f0"&pause&exit /b
把出错信息贴上来。

TOP

回复 11# powerbat

提示缺少一个分号
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

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

22行改成
    fso.OpenTextFile(folder2+'\\'+files.replace(/^.*\\/,''), 2, true).write(s);

TOP

如何在CMD中使用复制粘贴功能
http://www.bathome.net/thread-9963-1-1.html

TOP

怎么像是论坛吃字符了?
1

评分人数

TOP

返回列表