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

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

比如我输入三行文字:
1我是谁
2世界是什么
3你活着干嘛
不在同一行!

如何让它们随机变成:

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

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

先谢谢各位大神解答!

gnu 的 sort 最方便:
  1. sort.exe -R a.txt>b.txt
复制代码

TOP

gnu 的 sort 最方便:
CrLf 发表于 2014-6-3 09:50



请教 是不是本机应该有sort.exe程序?

TOP

回复 3# echobat


那个不是Windows自带的sort命令,可以下载一个GNU的工具包:
http://sourceforge.net/projects/unxutils/files/

TOP

哪位大神可以用批处理的   random 写吗,刚好学习一下,谢谢

TOP

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  $新文件行顺序  
复制代码
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复 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
复制代码

TOP

回复 7# terse


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

我往深处想了一下!

假如要处理的文件不是a.txt 而是要处理一整个文件夹里面的所有不规则的命名的txt文件,怎么将上面的改装呢?
谢谢

TOP

回复 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'));
复制代码

TOP

回复 9# terse


    terse版主,说不定人家是联盟过来的嘿嘿

TOP

返回列表