标题: [文本处理] [已解决]批处理怎样随机打乱文本内容? [打印本页]
作者: fanfande 时间: 2010-8-11 11:51 标题: [已解决]批处理怎样随机打乱文本内容?
本帖最后由 pcl_test 于 2016-7-8 20:10 编辑
版主,我这标题不错吧,给我加分,加红包吧!
问题是这样的:
同一文件夹内N多文本文件需要批处理处理
其中文本文件大致内容形如下格式:
aaaaaaa
bbbbbbbbb
cccccccc
dddddddd
eeeeee
原本这样的段落.用批处理随机打乱,也许会变成下面的形式
cccccccc
aaaaaaa
eeeeee
bbbbbbbbb
dddddddd
要求生成新的txt至该文件夹下的newtxt文件夹内!
在先等!
作者: a6c123 时间: 2010-8-11 12:29
- @echo off
- if not exist newtxt md newtxt
- for /f "delims=" %%a in ('dir /a:-d /b *.txt') do (
- set file=%%a
- SetLocal EnableDelayedExpansion
- set /a RanNum = !random! %% 10 + 1
- >"newtxt\!file!" sort /+!RanNum! "!file!"
- EndLocal
- )
复制代码
作者: Batcher 时间: 2010-8-11 15:01
怎样打乱指定文本文件里边的行序
http://bbs.bathome.net/thread-7977-1-1.html
批处理如何最有效率的打乱变量重新排序
http://bbs.bathome.net/thread-5905-1-1.html
作者: terse 时间: 2010-8-11 16:44
随机方法 论坛很多的 ,一般用SET 较多,个人以为 SET多了还是费资源的
常用下面的处理 效率会提升吗 没测试- @echo off&setlocal enabledelayedexpansion
- if "%1" equ "" (
- md newtxt 2>nul
- for /f "delims=" %%i in ('dir /a-d /b *.txt') do (
- (for /f "tokens=1* delims==" %%j in ('""%~0" "%%i"|sort"') do echo;%%k)>"newtxt\%%i"
- )
- pause&exit
- ) else for /f "usebackq delims=" %%i in (%1) do echo !random!!random!!random!=%%i
复制代码
作者: caruko 时间: 2010-8-11 17:20
呃,其实可以在每行前输入一个固定长度的 随机字符,可以是数字或者字母。
然后排序,去掉随机字符后输出。
作者: fanfande 时间: 2010-8-11 18:17
terse
你好,你那段测试下来好像有错误
还有,我认识你
之前的批处理论坛里面经常看到你的id !呵呵
[ 本帖最后由 fanfande 于 2010-8-11 18:24 编辑 ]
作者: 523066680 时间: 2010-8-11 20:04 标题: 回复 6楼 的帖子
=.=
terse那楼代码好棒~
楼上有啥错误要说出来撒,光说“有错误”会被批判的。
作者: fanfande 时间: 2010-8-13 00:32
我这里运行下来提示
此时不应该有bat "%%i"|sort"'
这是怎么回事呢
作者: terse 时间: 2010-8-13 03:37
原帖由 fanfande 于 2010-8-13 00:32 发表
我这里运行下来提示
此时不应该有bat "%%i"|sort"'
这是怎么回事呢
真不知怎么回事
文件名惹的祸?
这样试呢?- @echo off&setlocal enabledelayedexpansion
- if "%1" equ "" (
- md newtxt 2>nul
- for /f "delims=" %%i in ('dir /a-d /b *.txt') do (
- set "str=%%i"
- (for /f "tokens=1* delims==" %%j in ('%0 $^|sort') do echo;%%k)>"newtxt\%%i"
- )
- pause&exit
- ) else for /f "usebackq delims=" %%i in ("!str!") do echo !random!!random!!random!=%%i
复制代码
作者: fanfande 时间: 2010-8-13 18:26
在桌面上运行下来提示c:\document 不是内部或外部命令!
我把他复制到F盘上去运行,提示 F:\新建文件夹\新建 不是内部或外部命令
[ 本帖最后由 fanfande 于 2010-8-13 18:30 编辑 ]
作者: FOR 时间: 2010-8-13 18:40
re 4楼
if "%~1" equ ""
作者: terse 时间: 2010-8-14 01:32
原帖由 fanfande 于 2010-8-13 18:26 发表
在桌面上运行下来提示c:\document 不是内部或外部命令!
我把他复制到F盘上去运行,提示 F:\新建文件夹\新建 不是内部或外部命令
文件名 包含特殊字符不?
作者: fanfande 时间: 2010-8-15 00:01
没有特殊字符!就是通常的命名
作者: cjiabing 时间: 2011-8-30 09:27
本帖最后由 cjiabing 于 2011-8-30 19:50 编辑
-
-
- @echo off
- ::把文本中的行(段落)打乱顺序,进行随机排序。用了一个cmd代替临时文件,用了两个for编辑。变量延迟方面稍有困难。
- call :sorttxt E:\Batch\test.txt
- pause
- exit
- :SortTxt
- for /f "tokens=1*" %%i in ('cmd /v:on /c "@echo off&for /f "usebackq tokens^=*" %%a in ("%1") do (echo ^!random^! %%a)"^|sort') do echo %%j
- goto :eof
复制代码
作者: cjiabing 时间: 2011-8-30 19:39
回复 14# cjiabing
大哥,手机复制粘贴的,自己没有括。
我回来了。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |