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

MSG2输出数字,空处是TAB.
写成 #0!n!%%n= 这种八进制数,原来是考虑可能会用到,结果没用上,写成 #!n!#%n%= 则会减少几十个 set。
  1. @echo off&setlocal ENABLEDELAYEDEXPANSION
  2. set /a n=0,m=0
  3. for /f "delims=" %%i in ('more +20 %~f0') do (
  4.     set "str=%%i"
  5.     for /l %%n in (0,1,7) do set "_!RANDOM:~-1!!RANDOM:~-1!#0!n!%%n=!str:~%%n,1!"
  6.     set /a n+=1
  7. )
  8. for /f "tokens=2,3 delims=#=" %%a in ('set _') do (
  9.     set "str=%%a"
  10.     set /a y=m/8,x=m%%8,px=x-!str:~2,1!,py=y-!str:~1,1!,m+=1
  11.     set "msg1=!msg1!%%b"
  12.     set "msg2=!msg2!        !py!:!px!"
  13.     if !x! equ 7 (
  14.         set "msg1=!msg1!&echo/"
  15.         set "msg2=!msg2!&echo/"
  16.     )
  17. )
  18. echo %msg1%%msg2%
  19. goto :eof
  20. 我们去北大踢球吧
  21. 快上那儿等着信号
  22. 你不能离开大门口
  23. 生与死就在一瞬间
  24. 青春已从身边溜走
复制代码
1

评分人数

TOP

楼上这个,方法跟我那个差不多吧,只是我用set 排序,你用sort。

最早的时候,我想过一种类似洗扑克牌的乱序方法。

1:随机将后一个字符放在前一个字符的前面或者后面,组合成新的字符串。
2:将新字符串再一次洗牌,循环随机20-40次。(估计了一下40个字符20次差不多能做到足够乱序了)

只是思路的一种吧,细想了一下,发现效率不怎么高,就没继续了。

TOP

本帖最后由 caruko 于 2011-4-22 14:07 编辑

这个在随机排序大量文本的时候是不错,没有临时,没有大量变量,但是效率有点低。

1:echo更耗时,增加了echo次数。
2:sort 本身也是很耗内存的,sort /? 帮助命令看一下就能了解。N个排序对象,在SORT里,产生N个变量用来存放是至少的。set的机制不了解,但似乎在变量存放的时候就是有序的。
3:“ | sort + for”,echo完所有内容进入管道后,SORT才开始排序,SORT排序完并输出所有内容后,FOR开始读取。 所以耗时成倍增加。

TOP

的确,变量的增加让批处理速度变慢,但好像变慢的是变量读取速度,在频繁读取变量的时候差距就越大。

原因猜想:
可能真的是因为变量有序存放的原因?类似数据库?
不像一般的程序语言机制,只是增加内存消耗,没有明显增加读取耗时。

TOP

我写了这个测试代码
  1. @echo off&setlocal ENABLEDELAYEDEXPANSION
  2. for /l %%i in (1,1,10000) do set /a _%%i=%%i
  3. echo !time!
  4. for /l %%i in (1,1,10000) do set /a _1+=2
  5. echo !time!
  6. for /l %%i in (1,1,10000) do set /a _%%i+=2
  7. echo !time!
复制代码
同样是1万个变量
1:只读取一个变量进行计算,耗时6秒。
2:所有变量都读取进行计算,耗时16秒。

TOP

返回列表