Board logo

标题: [文本处理] [已解决]批处理怎样将一行汉字随机打乱排序? [打印本页]

作者: 每天几分    时间: 2015-3-9 15:23     标题: [已解决]批处理怎样将一行汉字随机打乱排序?

本帖最后由 每天几分 于 2015-3-9 20:52 编辑

最近需要练习打字,把一行选定的500字反复打,但这500字的顺序太过固定了,打多几次,人就有了预读反映,测不出真实打字速度,希望弄个批处理把这500字的顺序全部打乱。

注:只有一行,没有回车键。

如:的一了不在有个人这上中大为来我到出要以时……七支费父统府(这一行共500字,需要全部打乱)

谢谢楼下各位。
作者: CrLf    时间: 2015-3-9 17:35

  1. 1>1/* :
  2. @echo off
  3. cscript -nologo -e:jscript %0 <a.txt >b.txt
  4. pause & exit /b
  5. */
  6. var text = WScript.StdIn.ReadAll()
  7. var ar = text.split('').sort(function(){return Math.random()-0.5})
  8. WScript.Echo(ar.join(''))
复制代码

作者: pcl_test    时间: 2015-3-9 17:37

本帖最后由 pcl_test 于 2017-3-16 21:14 编辑

回复 1# 每天几分
第一行::后面的文字替换成你需要的文字就可以
  1. ::丽的转身作文字上善若水利万物而不争李白的抽刀断水水更流证明了水的至韧水滴石穿再顽强的青石也经不起水滴日复一日的侵蚀水是至刚至柔之物但是水流经高山峡谷会千回万转在迂回之间前行水在一次次的转身中走的更远转身是一种生活方式给心灵找个栖息地陶渊明是那个采菊东篱下悠然见南山的隐士他不愿为五斗米折腰毅然放弃仕途转身归隐田园才有了流传至今的桃花源他给我们展现了一份清高傲骨盛唐李太白意气风发有远大的政治抱负当他大呼仰天大笑出门去我辈岂是蓬蒿人时政治上遭到了不如意李白仍能举杯畅饮转身任清风洗涤心胸随月辉起舞弄影为世人留下以为衣袂飘扬的诗仙形象转身是一种人格伟大不屈的体现在中国这头东方雄狮沉睡之时人民海聚家鲁迅发现只有唤醒人民的思想才能拯救国家他坚决弃医从文拿起笔杆发誓要用笔唤醒中国魂他为了振兴民族放弃了个人理想在那个时代是何等的伟大众里寻他千百度蓦然回首那人却在灯火阑珊处多么美丽的转身学会转身等待你的是一片海阔天空熊熊烈火之中消防员背起伤员一次次冲出又一次次转身冲入火海汶川地震战士们一次次的转生救出一个个奄奄一息的生命面对歹徒高三学生临危不惧与歹徒作斗争他忘记了重要的高考抓住了歹徒身负重伤正是社会上草呢
  2. @echo off
  3. setlocal enabledelayedexpansion
  4. color a
  5. set str=
  6. set /p str=<"%~f0"
  7. set "str=%str:~2%"
  8. (for /l %%a in (0 1 499) do set /a r=!random!%%500 &&echo,!r!_%%a#!str:~%%a,1!)>$
  9. set s=
  10. for /f "tokens=1* delims=#" %%b in ('sort $') do set s=!s!%%c
  11. ::要输出到文本,下面一句改为>>"乱序.txt" echo;!s!
  12. echo;!s!
  13. del $
  14. echo.
  15. pause
复制代码

作者: 慕夜蓝化    时间: 2015-3-9 18:45

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.     set "str=%%i"
  4.     for /l %%a in (0 1 500) do (
  5.         set/a n=!random!%%500
  6.         call set/p=%%str:~!n!,1%%<nul
  7.     )
  8. )   
  9. pause
复制代码

作者: CrLf    时间: 2015-3-9 19:59

回复 4# 慕夜蓝化


    这样会重复吧,借兄台代码修改一个,不太考虑效率:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.     set "str=%%i"
  4.     for /l %%a in (0 1 500) do (
  5.         set/a n=!random!%%500 +%%a
  6.         for %%b in (!n!) do set/p=!str:~%%b,1!<nul
  7.         set str=!str:~%%a!!str:~,%%a!
  8.     )
  9. )   
  10. pause
复制代码

作者: 慕夜蓝化    时间: 2015-3-9 20:51

回复 5# CrLf

嗯嗯,我也改了一下
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.     set "str=%%i"
  4.     for /l %%a in (0 1 499) do (
  5.         set/a n=!random!%%(500-%%a^)
  6.         for %%b in (!n!) do set/p=!str:~%%b,1!<nul&set "u=!str:~%%b,1!"
  7.         for %%c in (!u!) do set "str=!str:%%c=!"
  8.     )
  9. )   
  10. pause
复制代码
这样就好了
作者: cobat    时间: 2015-3-9 21:07

本帖最后由 cobat 于 2015-3-10 11:00 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set "s=输入500字"
  3. for /l %%a in (1,1,500) do set _!random!_%%a=!s:~,1!&set s=!s:~1!
  4. (for /f "tokens=2 delims==" %%a in ('set _') do <nul set/p=%%a)>a.txt
  5. pause
复制代码

作者: 每天几分    时间: 2015-3-9 22:07

回复 6# 慕夜蓝化


    楼上各位,可以像2楼一样,顺手加个文本输出吗。。。。轻轻修改一下。。。。
作者: CrLf    时间: 2015-3-9 23:45

回复 8# 每天几分


    3 楼和 7 楼都可以输出文件的吧,你这样说他们很伤心的
作者: 慕夜蓝化    时间: 2015-3-10 07:31

回复 8# 每天几分

嗯,这样
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%i in (a.txt) do (
  3.     set "str=%%i"
  4.     for /l %%a in (0 1 499) do (
  5.         set/a n=!random!%%(500-%%a^)
  6.         for %%b in (!n!) do set/p=!str:~%%b,1!<nul&set "u=!str:~%%b,1!"
  7.         for %%c in (!u!) do set "str=!str:%%c=!"
  8.     )
  9. )) >b.txt   
  10. pause
复制代码
每点击一次,重置一回b.txt文本中的内容。




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