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

[数值计算] 随机乱序并计算运行时间(顺便PK下POWERSHELL脚本)

本帖最后由 batman 于 2013-7-30 20:08 编辑

本人不才,想以下面的代码来实现两个目的:
1、对计算批处理运行时间(时长限24小时内)进行示例;
2、PK一下POWERSHELL脚本如何实现,还请不吝赐教。
  1. @echo off&setlocal enabledelayedexpansion
  2. set "t=%time%"&set /a num=1000
  3. %-----------------------------------------------------%
  4. for /l %%a in (1,1,%num%) do set /a _!random!_%%a=%%a
  5. for /f "tokens=2 delims==" %%a in ('set _') do echo,%%a
  6. %-----------------------------------------------------%
  7. for %%a in (h-0-k-24,m-3-h-60,s-6-m-60,ms-9-s-100) do (
  8.   for /f "tokens=1-4 delims=-" %%1 in ("%%a") do (
  9.     set /a %%1=1!time:~%%2,2! %% 100-1!t:~%%2,2! %% 100
  10.     if !%%1! lss 0 set /a %%1+=%%4,%%3-=1
  11.   )
  12. )
  13. echo 用时%h%小时%m%分%s%秒%ms%毫秒
  14. pause>nul   
复制代码
注:虚线范围内为随机乱序代码,同时希望能从代码的简洁度以及效率(时间)上进行比较
1

评分人数

***共同提高***

1 说实在的,我理解能力听差的,[随机乱序并计算运行时间] 我是没看懂,我的bat又差,我又看不太懂你写的东西,所以没法回复.

2 我试着运行了上述代码,发现貌似是每行产生一个随机数,产生多少行没统计,最后有一个时间输出.
powershell 用 Measure-Command { 代码块 } 来统计时间。也可以用时间相减,用Get-Random 来产生随机数。这都是简单的东西。
  1. $开始时间 = Get-Date
  2. $随机数组 = 1..1000
  3. for ($i=1001;$i -gt 1;$i--)
  4. {
  5. $当前随机数 = Get-Random  -InputObject  $随机数组
  6. write-host $当前随机数
  7. #显示1000次  718毫秒
  8. }
  9. $结束时间 = Get-Date
  10. $计算用时 = $结束时间 - $开始时间
  11. $计算用时
复制代码
3 (你很恨我这我知道,因为我们有脚本之争,不过,但凡思想学术界的传统,各门各派都有门户,都有争论,我认为这很正常,不算什么。)我一直想问你个事:如果有linux魔教之妖人,用linux邪派武功,组团来pk我,我双拳难敌四手,把我打得惨了,你身怀bat,vbs神功,能救我,你帮我不帮?

当然了,所谓邪派,我只是这么一说。从倚天这部书中,我们可知,魔教总是自称正教,他人才是邪教。
而且,正教中就没有尹志平么?
但是捏,人总是脱离不了门户的,你承认门户么?如果不承认,那你也不会有【总想挺bat,驳powershell】的想法和做法了。

bat太老,功能听差的,vbs面向对象了,强了很多,但对象少。构造对象,再调用,语法麻烦,代码量大,powershell更强了,总之我觉得我microsoft派牛人,不给菜鸟教授先进的脚本,而用蠢笨过时的bat,搞的他们武功太差,进而导致魔教linux的武功大肆在我派落地,生根,蚕食win空间,我派各个长老实在是极大犯罪!!!


外国人,不懂中文,一般不会看我们论坛,所以坑的都是中国脚本爱好者,长此以往,中国脚本人实力世界垫底,你们不会觉得愧对祖师么?
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

本帖最后由 PakTC 于 2013-7-30 22:16 编辑

man,要效率,我对比过,用类似选择排序的方法逐步提取随机数比set _列出快一些。
不过要写起来方便 还是set _


收回上面的话了。
如果数量少,自然是for提取速度快。
如果数量大,set _还是只需要一点点时间,毕竟是内部处理的事情。
Press Any Key To Continue...

TOP

回复 2# PowerShell


    1楼的1000个随机数是1-1000随机输出不重复哦
Press Any Key To Continue...

TOP

回复 2# PowerShell


看着想笑,没谁恨你什么,好吧,为了和谐不说啥了,先森这边有请:http://bbs.bathome.net/thread-25583-1-1.html
补充一下,楼主的意思其实是对 1~1000 的数字乱序排列

TOP

可能POWERSHELTH版主没理解我的意思,当然,这个要怪我,没有讲清楚。。。
首先我的代码实现的是将1-1000这1000个数随机打乱次序并输出,然后计算了整个
乱序输出的时间,其中计算时间的代码并不是重点,只是为了让人更直观地看到程序
的用时。同时,我想如果用POWERSHELL来实现这一随机乱序和输出,代码是否也
能像批这样简洁,同时总共需要的时间又是多少(在同一台机子上比较)?除此以外,
并没有任何别的意思。。。
***共同提高***

TOP

一个含有1000个元素的集合中,取多少个元素呢?
如果取1000个的话,就是把这1000个数(随机)重新排列呀,重新排列当然【不会有重复出现的元素】啊,是这样么?
只有一条命令,除了滚屏的时间,估计也就1---2毫秒吧,
  1. 1..1000 | Get-Random -Count 1000
复制代码
-Count <int>
确定将返回的对象数。默认值为 1。如果 Count 的值超过集合中的对象数,Get-Random 按随机顺序返回所有对象。
1

评分人数

脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

本帖最后由 CrLf 于 2013-7-31 20:21 编辑

回复 7# PowerShell


    我原来是用 add-member 添加随机属性值来排序,比较复杂,inputobject 这个用法更爽,学习了

TOP

数稍大点 这样也可以 直接 ECHO
  1. @echo off&setlocal enabledelayedexpansion
  2. set "t=%time%"&set /a num=10000
  3. if "%~1" == "" (
  4. %-----------------------------------------------------%
  5.    for /f "tokens=2" %%i in ('%~s0 : ^|sort') do echo %%i
  6. %-----------------------------------------------------%
  7.    for %%a in (h-0-k-24,m-3-h-60,s-6-m-60,ms-9-s-100) do (
  8.        for /f "tokens=1-4 delims=-" %%1 in ("%%a") do (
  9.            set /a %%1=1!time:~%%2,2! %% 100-1!t:~%%2,2! %% 100
  10.            if !%%1! lss 0 set /a %%1+=%%4,%%3-=1
  11.        )
  12.    )
  13.     echo 用时!h!小时!m!分!s!秒!ms!毫秒
  14.     pause&exit
  15. ) else for /l %%i in (1 1 %num%) do echo !random! %%i
复制代码

TOP

回复 9# terse


    哈哈,我今天挖帖又看了一次你的这个用sort的方法。

TOP

本帖最后由 CrLf 于 2013-8-2 18:46 编辑

seq+shuf:
  1. seq 1 10000 | shuf
复制代码
gnu sort 7.6:
  1. @(for /l %%a in (1 1 1000) do @echo %%a)|sort -R
复制代码

TOP

回复 10# 523066680
没办法 不习惯于太多的SET 想省点

TOP

返回列表