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

[文本处理] 如何用批处理把TXT文本的内容进行无序/随机排列/打乱?

[复制链接]
发表于 2008-5-6 14:19:59 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-11-9 19:39 编辑

比如我有建一TXT文件,里面有内容:
123
234
345
567
678
789
890
如何把他们进行无序排列?用批处理实现。比如实现后的排列为
567
123
345
789
234
890
456
发表于 2008-5-6 15:19:56 | 显示全部楼层
借用 随风 兄的代码:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f %%i in (a.txt) do set _!random:~-5!!random:~-5!=%%i
  3. for /f "tokens=2 delims==" %%i in ('set _') do echo %%i

  4. pause>nul
复制代码
注意:该文本不能太多的行
发表于 2008-5-6 17:01:16 | 显示全部楼层
  对乱序重列文本内容,有一个比较通用的思路:先在每行数据前插入随机数,然后,再用 sort 命令重新排列数据,重列时再去掉插入的随机数即可。

  演示代码考虑了各种特殊情况:包括特殊符号、空行、以分号打头的行……,能处理的数据行数只受内存的限制,能处理的行长受 findstr 处理能力的限制(处理65535个字符长度的行绰绰有余),只是处理过程中会产生比原文件略大的临时文件:
  1. @echo off
  2. cd.>tmp.txt
  3. for /f "delims=" %%i in ('findstr /n .* test.txt') do (
  4.   set "str=%%i"
  5.     setlocal enabledelayedexpansion
  6.     set "str=!str:*:=!"
  7.     >>tmp.txt echo !random!:!str!
  8.     endlocal
  9. )
  10. cd.>result.txt
  11. for /f "delims=" %%i in ('sort tmp.txt') do (
  12.     set "str=%%i"
  13.     setlocal enabledelayedexpansion
  14.     set "str=!str:*:=!"
  15.     >>result.txt echo.!str!
  16.     endlocal
  17. )
  18. del tmp.txt
  19. start result.txt
复制代码


  再来个效率稍微高一点的:

  1. @echo off
  2. cd.>tmp.txt
  3. for /f "delims=" %%i in ('findstr /n .* test.txt') do (
  4.   set "str=%%i"
  5.     setlocal enabledelayedexpansion
  6.     set "str=!str:*:=!"
  7.     >>tmp.txt echo !random! !str!
  8.     endlocal
  9. )
  10. cd.>result.txt
  11. for /f "tokens=1*" %%i in ('sort tmp.txt') do (
  12.     set "str=%%j"
  13.     setlocal enabledelayedexpansion
  14.     >>result.txt echo.!str!
  15.     endlocal
  16. )
  17. del tmp.txt
  18. start result.txt
复制代码
 楼主| 发表于 2008-5-6 18:23:08 | 显示全部楼层
谢谢两位的帮忙!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 17:17 , Processed in 0.024653 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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