标题: [文本处理] 批处理BAT怎样让TXT文本里的按行来随机排列? [打印本页]
作者: echobat 时间: 2014-6-3 08:18 标题: 批处理BAT怎样让TXT文本里的按行来随机排列?
比如我输入三行文字:
1我是谁
2世界是什么
3你活着干嘛
不在同一行!
如何让它们随机变成:
3你活着干嘛
1我是谁
2世界是什么
或者别的顺序?
PS:我这边举的例子只是三行,但我实际要处理的文本。。很多行就是了
先谢谢各位大神解答!
作者: CrLf 时间: 2014-6-3 09:50
gnu 的 sort 最方便:复制代码
作者: echobat 时间: 2014-6-3 10:11
gnu 的 sort 最方便:
CrLf 发表于 2014-6-3 09:50
请教 是不是本机应该有sort.exe程序?
作者: DAIC 时间: 2014-6-3 13:33
回复 3# echobat
那个不是Windows自带的sort命令,可以下载一个GNU的工具包:
http://sourceforge.net/projects/unxutils/files/
作者: echobat 时间: 2014-6-3 15:14
哪位大神可以用批处理的 random 写吗,刚好学习一下,谢谢
作者: PowerShell 时间: 2014-6-3 17:09
powershell代码- $文件名 = c:\xxx\a.txt
- $源文件行顺序 = Get-Content $文件名 -ReadCount 0
- $文件长度= $源文件行顺序.length + 1
- $新文件行顺序 = get-random -min 1 -max $文件长度 -Count $文件长度 #行洗牌
- out-file b.txt -InputObject $新文件行顺序
复制代码
作者: terse 时间: 2014-6-3 22:31
回复 1# echobat
文件小话 可以调用本身吧 这样省了临时文件- @echo off&setlocal enabledelayedexpansion
- (for /f "delims=" %%i in (a.txt) do echo !random!!random!!random! %%i)>"%temp%\$"
- sort /o "%temp%\#" "%temp%\$"
- (for /f "usebackqtokens=1*" %%i in ("%temp%\#") do echo %%j)>new_a.txt
- del "%temp%\#" "%temp%\$"
- pause
复制代码
作者: echobat 时间: 2014-6-4 09:08
回复 7# terse
你好啊,terse版主,首先感谢在百忙中能及时的回复!已经初步解决了问题!
我往深处想了一下!
假如要处理的文件不是a.txt 而是要处理一整个文件夹里面的所有不规则的命名的txt文件,怎么将上面的改装呢?
谢谢
作者: terse 时间: 2014-6-4 13:00
回复 8# echobat
我不是版主
整个文件夹文件不是很大的话 改一下- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
- (for /f "usebackqdelims=" %%i in ("%%a") do echo !random!!random!!random! %%i)>"%temp%\$"
- sort /o "%temp%\#" "%temp%\$"
- (for /f "usebackqtokens=1*" %%i in ("%temp%\#") do echo %%j)>"!random!!random!!random!_%%a"
- )
- del "%temp%\#" "%temp%\$"
- pause
复制代码
也可以试下这样- @if(0)==(0) echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
- cscript -nologo -e:javascript %0 <"%%a" >"!random!!random!!random!_%%a"
- )
- pause&exit /b
- @end
- var arr = WScript.StdIn.ReadAll().split("\n");
- var arr = arr.sort(function (a,b){return Math.random() >= 0.5 ? 1 : -1});
- WScript.echo(arr.join('\n'));
复制代码
作者: CrLf 时间: 2014-6-4 17:55
回复 9# terse
terse版主,说不定人家是联盟过来的嘿嘿
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |