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

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

本帖最后由 pcl_test 于 2016-7-8 20:10 编辑

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

问题是这样的:

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

aaaaaaa
bbbbbbbbb
cccccccc
dddddddd
eeeeee

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

cccccccc
aaaaaaa
eeeeee
bbbbbbbbb
dddddddd

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

在先等!
1

评分人数

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

  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

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

怎样打乱指定文本文件里边的行序
http://bbs.bathome.net/thread-7977-1-1.html

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

评分人数

    • CrLf: 乐于助人PB + 3
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

随机方法 论坛很多的 ,一般用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
复制代码

TOP

呃,其实可以在每行前输入一个固定长度的 随机字符,可以是数字或者字母。
然后排序,去掉随机字符后输出。

TOP

terse
你好,你那段测试下来好像有错误


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

[ 本帖最后由 fanfande 于 2010-8-11 18:24 编辑 ]
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

回复 6楼 的帖子

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

terse那楼代码好棒~

楼上有啥错误要说出来撒,光说“有错误”会被批判的。

TOP

我这里运行下来提示
此时不应该有bat  "%%i"|sort"'
这是怎么回事呢
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

原帖由 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

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

在桌面上运行下来提示c:\document 不是内部或外部命令!

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

[ 本帖最后由 fanfande 于 2010-8-13 18:30 编辑 ]
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

re 4楼
if "%~1" equ ""
1

评分人数

    • CrLf: 乐于助人PB + 3

TOP

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

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

文件名 包含特殊字符不?

TOP

没有特殊字符!就是通常的命名
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

本帖最后由 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
复制代码
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 14# cjiabing


    大哥,手机复制粘贴的,自己没有括。
    我回来了。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

返回列表