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

[文本处理] [已解决]批处理怎样随机打乱文本内容?

[复制链接]
发表于 2010-8-11 11:51:25 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-7-8 20:10 编辑

版主,我这标题不错吧,给我加分,加红包吧!

问题是这样的:

同一文件夹内N多文本文件需要批处理处理
其中文本文件大致内容形如下格式:

aaaaaaa
bbbbbbbbb
cccccccc
dddddddd
eeeeee

原本这样的段落.用批处理随机打乱,也许会变成下面的形式

cccccccc
aaaaaaa
eeeeee
bbbbbbbbb
dddddddd

要求生成新的txt至该文件夹下的newtxt文件夹内!

在先等!

评分

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

查看全部评分

发表于 2010-8-11 12:29:34 | 显示全部楼层
  1. @echo off
  2. if not exist newtxt md newtxt
  3. for /f "delims=" %%a in ('dir /a:-d /b *.txt') do (
  4.     set file=%%a
  5.     SetLocal EnableDelayedExpansion
  6.     set /a RanNum = !random! %% 10 + 1
  7.     >"newtxt\!file!" sort /+!RanNum! "!file!"
  8.     EndLocal
  9. )
复制代码

评分

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

查看全部评分

发表于 2010-8-11 15:01:29 | 显示全部楼层
怎样打乱指定文本文件里边的行序
http://bbs.bathome.net/thread-7977-1-1.html

批处理如何最有效率的打乱变量重新排序
http://bbs.bathome.net/thread-5905-1-1.html

评分

参与人数 1PB +3 收起 理由
CrLf + 3 乐于助人

查看全部评分

发表于 2010-8-11 16:44:18 | 显示全部楼层
随机方法 论坛很多的 ,一般用SET 较多,个人以为 SET多了还是费资源的
常用下面的处理   效率会提升吗 没测试
  1. @echo off&setlocal enabledelayedexpansion
  2. if "%1" equ "" (
  3.    md newtxt 2>nul
  4.         for /f "delims=" %%i in ('dir /a-d /b *.txt') do (
  5.         (for /f "tokens=1* delims==" %%j in ('""%~0" "%%i"|sort"') do echo;%%k)>"newtxt\%%i"
  6. )
  7. pause&exit
  8. ) else for /f "usebackq delims=" %%i in (%1) do echo !random!!random!!random!=%%i
复制代码
发表于 2010-8-11 17:20:13 | 显示全部楼层
呃,其实可以在每行前输入一个固定长度的 随机字符,可以是数字或者字母。
然后排序,去掉随机字符后输出。
 楼主| 发表于 2010-8-11 18:17:31 | 显示全部楼层
terse
你好,你那段测试下来好像有错误


还有,我认识你
之前的批处理论坛里面经常看到你的id !呵呵

[ 本帖最后由 fanfande 于 2010-8-11 18:24 编辑 ]
发表于 2010-8-11 20:04:31 | 显示全部楼层

回复 6楼 的帖子

=.=
还有,我认识你,上次你蹭饭没给钱……

terse那楼代码好棒~

楼上有啥错误要说出来撒,光说“有错误”会被批判的。
 楼主| 发表于 2010-8-13 00:32:59 | 显示全部楼层
我这里运行下来提示
此时不应该有bat  "%%i"|sort"'
这是怎么回事呢
发表于 2010-8-13 03:37:29 | 显示全部楼层
原帖由 fanfande 于 2010-8-13 00:32 发表
我这里运行下来提示
此时不应该有bat  "%%i"|sort"'
这是怎么回事呢

真不知怎么回事
文件名惹的祸?
这样试呢?
  1. @echo off&setlocal enabledelayedexpansion
  2. if "%1" equ "" (
  3.    md newtxt 2>nul
  4.    for /f "delims=" %%i in ('dir /a-d /b *.txt') do (
  5.        set "str=%%i"
  6.        (for /f "tokens=1* delims==" %%j in ('%0 $^|sort') do echo;%%k)>"newtxt\%%i"
  7.    )
  8.    pause&exit
  9. ) else for /f "usebackq delims=" %%i in ("!str!") do echo !random!!random!!random!=%%i
复制代码

评分

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

查看全部评分

 楼主| 发表于 2010-8-13 18:26:43 | 显示全部楼层
在桌面上运行下来提示c:\document 不是内部或外部命令!

我把他复制到F盘上去运行,提示 F:\新建文件夹\新建 不是内部或外部命令

[ 本帖最后由 fanfande 于 2010-8-13 18:30 编辑 ]
发表于 2010-8-13 18:40:19 | 显示全部楼层
re 4楼
if "%~1" equ ""

评分

参与人数 1PB +3 收起 理由
CrLf + 3 乐于助人

查看全部评分

发表于 2010-8-14 01:32:07 | 显示全部楼层
原帖由 fanfande 于 2010-8-13 18:26 发表
在桌面上运行下来提示c:\document 不是内部或外部命令!

我把他复制到F盘上去运行,提示 F:\新建文件夹\新建 不是内部或外部命令

文件名 包含特殊字符不?
 楼主| 发表于 2010-8-15 00:01:41 | 显示全部楼层
没有特殊字符!就是通常的命名
发表于 2011-8-30 09:27:21 | 显示全部楼层
本帖最后由 cjiabing 于 2011-8-30 19:50 编辑


  1. @echo off
  2. ::把文本中的行(段落)打乱顺序,进行随机排序。用了一个cmd代替临时文件,用了两个for编辑。变量延迟方面稍有困难。
  3. call  :sorttxt     E:\Batch\test.txt
  4. pause
  5. exit
  6. :SortTxt
  7. 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
  8. goto :eof
复制代码
发表于 2011-8-30 19:39:21 | 显示全部楼层
回复 14# cjiabing


    大哥,手机复制粘贴的,自己没有括。
    我回来了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 23:26 , Processed in 0.023220 second(s), 14 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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