标题: [文本处理] [已解决]批处理指定文本内随机提取内容再插入txt的处理 [打印本页]
作者: fanfande 时间: 2011-11-27 12:02 标题: [已解决]批处理指定文本内随机提取内容再插入txt的处理
本帖最后由 fanfande 于 2011-11-30 00:27 编辑
在 a.txt 内每行文字不一样,如下所示:- 这是第1行的文字
- 这是第2行的文字
- 这是第3行的文字
- 这是第4行的文字
- ......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 编辑
- @echo off&setlocal enabledelayedexpansion
- set sd=源文件夹
- set dd=新文件夹
- md "%dd%" 2>nul
- (for /f "delims=" %%i in (a.txt)do echo !random!-%%i)>a.txt.yky
- for /f "tokens=1* delims=-" %%i in ('sort a.txt.yky')do (
- set/a n0+=1&set #!n0!=%%j)
- del a.txt.yky
- for /f "delims=" %%i in ('dir/b/a-d "%sd%\*.txt"')do (
- set/a "m+=1,mm=m%%n0+1"
- echo !m! %%i
- for /f "tokens=2 delims=:" %%a in ('find /c /v "" "%sd%\%%i"')do set/a n=%%a+1
- set/a "rn=!random!%%n+1"
- (for /f "tokens=1* delims=:" %%b in ('findstr/n .* "%sd%\%%i"')do (
- if %%b==!rn! set n=0&call echo.%%#!mm!%%
- echo.%%c)
- if !n! neq 0 call echo.%%#!mm!%%)>"%dd%\%%i"
- )
- pause
复制代码
作者: powerbat 时间: 2011-11-28 00:23
- @set @n=0//&cscript.exe -e:jscript "%~f0"&exit /b
-
- folder1 = "txt所在文件夹";
- folder2 = "新的文件夹";
- info = "a.txt";
-
- fso = new ActiveXObject("Scripting.FileSystemObject");
- fc = new Enumerator(fso.GetFolder(folder1).files);
- files = [];
- for (i=0; !fc.atEnd(); fc.moveNext()) {
- fp = fc.item().Path;
- if (/\.txt$/i.test(fp)) files[i++] = fp;
- }
- texts = fso.OpenTextFile(info).ReadAll().split("\r\n");
- if (!fso.FolderExists(folder2)) fso.CreateFolder(folder2);
- for (i=0; i<files.length; i++)
- {
- s = fso.OpenTextFile(files[i]).ReadAll();
- rndpos = parseInt(Math.random() * s.length);
- rndtxt = texts[parseInt(Math.random() * texts.length)];
- s = s.slice(0,rndpos) + rndtxt + s.slice(rndpos);
- fso.OpenTextFile(folder2+'\\'+files[i].replace(/^.*\\/,'')).write(s));
- }
复制代码
作者: 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 |