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

[文本处理] 批处理BAT怎样让TXT文本里的按行来随机排列?

[复制链接]
发表于 2014-6-3 08:18:44 | 显示全部楼层 |阅读模式
比如我输入三行文字:
1我是谁
2世界是什么
3你活着干嘛
不在同一行!

如何让它们随机变成:

3你活着干嘛
1我是谁
2世界是什么

或者别的顺序?
PS:我这边举的例子只是三行,但我实际要处理的文本。。很多行就是了

先谢谢各位大神解答!
发表于 2014-6-3 09:50:15 | 显示全部楼层
gnu 的 sort 最方便:
  1. sort.exe -R a.txt>b.txt
复制代码
 楼主| 发表于 2014-6-3 10:11:49 | 显示全部楼层
gnu 的 sort 最方便:
CrLf 发表于 2014-6-3 09:50



请教 是不是本机应该有sort.exe程序?
发表于 2014-6-3 13:33:03 | 显示全部楼层
回复 3# echobat


那个不是Windows自带的sort命令,可以下载一个GNU的工具包:
http://sourceforge.net/projects/unxutils/files/
 楼主| 发表于 2014-6-3 15:14:14 | 显示全部楼层
哪位大神可以用批处理的   random 写吗,刚好学习一下,谢谢
发表于 2014-6-3 17:09:23 | 显示全部楼层
powershell代码

  1. $文件名 = c:\xxx\a.txt
  2. $源文件行顺序 = Get-Content $文件名 -ReadCount  0
  3. $文件长度= $源文件行顺序.length + 1
  4. $新文件行顺序 = get-random -min 1 -max $文件长度 -Count $文件长度     #行洗牌
  5. out-file b.txt  -InputObject  $新文件行顺序  

复制代码
发表于 2014-6-3 22:31:57 | 显示全部楼层
回复 1# echobat
文件小话 可以调用本身吧 这样省了临时文件
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%i in (a.txt) do echo !random!!random!!random! %%i)>"%temp%\$"
  3. sort /o "%temp%\#" "%temp%\$"
  4. (for /f "usebackqtokens=1*" %%i in ("%temp%\#") do echo %%j)>new_a.txt
  5. del "%temp%\#" "%temp%\$"
  6. pause
复制代码
 楼主| 发表于 2014-6-4 09:08:38 | 显示全部楼层
回复 7# terse


    你好啊,terse版主,首先感谢在百忙中能及时的回复!已经初步解决了问题!

我往深处想了一下!

假如要处理的文件不是a.txt 而是要处理一整个文件夹里面的所有不规则的命名的txt文件,怎么将上面的改装呢?
谢谢
发表于 2014-6-4 13:00:28 | 显示全部楼层
回复 8# echobat
我不是版主
整个文件夹文件不是很大的话 改一下
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
  3.     (for /f "usebackqdelims=" %%i in ("%%a") do echo !random!!random!!random! %%i)>"%temp%\$"
  4.     sort /o "%temp%\#" "%temp%\$"
  5.     (for /f "usebackqtokens=1*" %%i in ("%temp%\#") do echo %%j)>"!random!!random!!random!_%%a"
  6. )
  7. del "%temp%\#" "%temp%\$"
  8. pause
复制代码
也可以试下这样

  1. @if(0)==(0) echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
  3.     cscript -nologo -e:javascript %0 <"%%a" >"!random!!random!!random!_%%a"
  4. )
  5. pause&exit /b
  6. @end
  7. var arr = WScript.StdIn.ReadAll().split("\n");
  8. var arr = arr.sort(function (a,b){return Math.random() >= 0.5 ? 1 : -1});
  9. WScript.echo(arr.join('\n'));
复制代码
发表于 2014-6-4 17:55:20 | 显示全部楼层
回复 9# terse


    terse版主,说不定人家是联盟过来的嘿嘿
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 04:18 , Processed in 0.031586 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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