Board logo

标题: [文本处理] 批处理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 最方便:
  1. sort.exe -R a.txt>b.txt
复制代码

作者: 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代码
  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  $新文件行顺序  
复制代码

作者: terse    时间: 2014-6-3 22:31

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

作者: echobat    时间: 2014-6-4 09:08

回复 7# terse


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

我往深处想了一下!

假如要处理的文件不是a.txt 而是要处理一整个文件夹里面的所有不规则的命名的txt文件,怎么将上面的改装呢?
谢谢
作者: terse    时间: 2014-6-4 13:00

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

作者: CrLf    时间: 2014-6-4 17:55

回复 9# terse


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




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2