|
|
发表于 2013-9-15 11:14:33
|
显示全部楼层
第九题,验证结果,只对脚本不对人。我觉得这是磁盘密集型程序.
测试机 硬盘=raid5=各类杂数据600G cpu=i5 4670=3.7G=4核 按说cpu硬盘算较快的,
现在公司文件服务器上的数据,动辄3---4tb不新鲜。600g不算多。根目录+各级非空子目录=2万多个,也不算多。
想知道你的f盘,总共有多少个非空目录么?用下述语句即可:
- $f盘所有目录 = Get-ChildItem f:\ -Recurse -Force | Where-Object {($_.PsIsContainer -eq $true) -and ( $_.GetFiles().Count -ne 0)}
- write-host "需要处理的目录数为:" $f盘所有目录.Length
复制代码 我的powershell脚本,计算总用时=1分50秒
我的powershell脚本,首先获取f盘所有目录,这时raid盘叽里呱啦响,磁盘读1.7M---2.5M,写280k左右。cpu占9%
然后算目录中文件的md5,此时磁盘读写很低,cpu占29%左右。
然后向d盘写一个临时文件,【f盘重复目录信息.txt】,其内容 如:
10 F:\DL\Cpbcw_20110918215925\Tetris\Blocks 2e8961dee211345fab07eeba8ab7110f
第一部分是这个目录含有的文件数,第二部分是路径,第三部分是文件名列表的md5码
当然这个步骤不是必须。如果没有此步骤,脚本更快。
然后进入第二部分,对此临时文件进行处理。生成最终结果文件。【f盘重复目录最终结果.txt】3.3MB 为unicode编码,变成ansi编码应该 1.8 MB左右。
内容大概是这样:
----------------------------------------------
F:\软件仓库\装机软件\DRV\TL-WN811N_851N_910N_951N\Driver Files\Win2000
F:\软件仓库\装机软件\DRV\TL-WN811N_851N_910N_951N\Driver Files\WinXP\32
-----------------------------------------------
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\ar
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\bg
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\ca
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\cs
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\da
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\de
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\el
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\es
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\et
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\eu
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\fi
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\fr
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\he
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\hr
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\hu
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\id
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\it
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\ja
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\ko
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\lt
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\lv
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\ms
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\nl
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\no
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\pl
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\pt
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\pt-BR
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\ro
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\ru
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\sk
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\sl
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\sr-Cyrl-CS
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\sr-Latn-CS
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\sv
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\th
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\tr
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\uk
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\vi
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\zh-Hans
F:\DL\Cpbcw_20110918215925\Tetris\Bin\Debug\zh-Hant
-----------------------------------------------
F:\软件仓库\装机软件\DRV\TL-WN811N_851N_910N_951N\Driver Files\Vista\32
F:\软件仓库\装机软件\DRV\TL-WN851N 2.0 Win7 Beta版驱动\X86
-----------------------------------------------
F:\软件仓库\装机软件\DRV\TL-WN811N_851N_910N_951N\Driver Files\Vista\64
F:\软件仓库\装机软件\DRV\TL-WN851N 2.0 Win7 Beta版驱动\X64
----------------------------------------------------
我特意查找了下,有下述这两个目录
f:\DL\Swords.SoldiersCN\Swords.Soldiers\Data\Fonts\defaultFontButtons\HD
f:\DL\Swords.SoldiersCN\Swords.Soldiers\Data\Fonts\defaultFontButtons\SD
---结论---
1这道题被powerhshell完美地解决了,没有什么特殊目录取不出来的,没有多取,没有少取。没有误取。用bat貌似没人能实现。
2快速。用bat貌似没人能实现。
3因权限问题读取不了的目录文件,除外。
---致出题人---
1 就好像考大学一样,经常有一年的题出的难了,我看今年的第九题就是如此。所以大家答得都不好。
2 不妨搞一个2013年bat编程大赛外传,还是第九题:
不限制用任何语言,不限制同时用2种语言(如vbs嵌入bat等)不限制任何外部程序。
如果可以用任何外部程序,这道题解起来貌似好写多了吧。
3 我希望能用【1分50秒】给大家砸来出点,写脚本的激情。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|