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

TOP

没事,还有我们这些带着羡慕嫉妒恨的观众呢!
如无特别说明,代码测试环境均为 XP SP3

TOP

回复 15# 523066680


    我和我的小伙伴都惊呆了!我才做了一题呀,就有奖品。只能说非常感谢管理员的慷慨❤
1

评分人数

    • lky216: 认真你就输了,还是不明真相的观众给你+技术 ...技术 + 1
nevermore

TOP

本帖最后由 PowerShell 于 2013-9-8 09:24 编辑

我来凑热闹了,其实我并不想凑,咱又不是评委会的,况且不懂bat,而且不想得罪人.
但插科打诨,又怕被人笑话,但本着严谨的态度,来了就得帮忙校验,得罪莫怪啊,  ----先凿吧两句。

----看了看第六题-----
首先,我想提的是,出题人是严谨的么?   ---你会说,那当然了。但我觉得未必,
[计算任意两数值的商,要求精确到小数点后100位(没有100位的补足100位)。]没说明是否整数,是否正负.
那我只能判定,可以非整数,可以正负.----这导致6楼,8楼理解错误.当然做的就不对了.
-----7楼答错题了.应该打屁股,
------只有2楼理解了题意.做出了答案,正确否,我没看.但是改了下除数和被除数后,程序报错.
set str1=1.234
set str2=2.345
后,报错信息为[此时不应有 1。] 是不是,我哪里搞的不对了呢?请告知.

---结论---
凡是答了第六题的,费了半天脑细胞,第六题全线阵亡!

----再凿吧两句----
从小学开始,我们就是从千考万题中挣扎过来的,
1没明确点明条件的问题很多,虽然这样的题有点不地道,但你不能怪考官,理解题的能力也是一种能力.
2犀利嘛哈答串题的也是有的.
3有人告诉我价值xx元的礼品都是啥么?呵呵~,我只对是啥感兴趣,并不想要.要是我经过努力得了这,估计也就一丢~~~
4又来补充了:计算任意两数值的商,除数,被除数,这两个数要是可以是带小数点的话,【出题时】应该限定小数点前,小数点后,最多是多少位,让大家以此编程,是不是好点?
如果不限定的话,我把除数搞成小数点后几千位,被除数小数点后几万位,你也不能说错啊。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复 2# terse


set str1=1.234
set str2=2.345
我也测试了一下,第六题确实报错了。

TOP

感谢站长,感谢评委!

TOP

建议从答题中,选出每题的最佳代码,好让我们这些后辈学习学习,是用什么思路去想,用什么方法去实现。毕竟如果每个都仔细看完的话,会死不少脑细胞的。。。

TOP

回复 20# DAIC
首先谢测试
也谢测试本人六题代码的所有人
请将代码第七行    set "d=" 改为  set "d=0" 试下

TOP

本帖最后由 PowerShell 于 2013-9-14 18:25 编辑

第九题,验证结果,只对脚本不对人。我觉得这是磁盘密集型程序.
测试机 硬盘=raid5=各类杂数据600G   cpu=i5 4670=3.7G=4核 按说cpu硬盘算较快的,

--2楼--
运行3个bat,都很快就完成了。生成3个dir_list.txt 一样大,生成文件=136k,内容基本相同,不完全相同。很明显目录取的不全,甚至太少.
生成的文件,大致:
f:\DL\Swords.SoldiersCN\Swords.Soldiers\Data\Fonts\defaultFontButtons\HD
0x0750.tga
0x0751.tga
0x0752.tga
0x0753.tga
0x0754.tga
0x0755.tga
0x0756.tga
0x0757.tga
0x0758.tga
0x0759.tga

f:\DL\Swords.SoldiersCN\Swords.Soldiers\Data\Fonts\defaultFontButtons\SD
0x0750.tga
0x0751.tga
0x0752.tga
0x0753.tga
0x0754.tga
0x0755.tga
0x0756.tga
0x0757.tga
0x0758.tga
0x0759.tga


--3楼--
1 脚本不放在f盘根目录,不能干活,不太好。
2 运行的很慢,根目录会产生filera.txt filerb.txt f_record.txt。filera.txt filerb.txt 这两个文件内容很小,频繁在变.
3 出现n多  '群规.txt_1752' 不是内部或外部命令,也不是可运行的程序 ,引号中的是文件名的一部分,貌似这些文件名中含有等号,下划线,左右方括号。
4 出现几十个 [输入行太长]
5 脚本磁盘占用很低,几乎没有写入,cpu占用满了,即cpu频率-3.7G,cpu占用率=40%左右,.而且占用了很久.成了cpu密集型程序.但也搞了1--2个小时左右.等不及了,睡了一觉。也不知道到底搞了多久。
6 弹出n个对话框,每弹出一个,脚本都暂停住了。[该版本的 f:\xxx\98dos\more.com 与你运行的 Windows 版本不兼容。请查看计算机的系统信息,然后联系软件发布者]这个目录有more.com,io.sys 是某dos磁盘目录。
总之,是64位win无法运行16位的more.com 。
7 生成结果f_record.txt = 1.7 MB 结果有重复,如:
"f:\FTP"
"f:\FTP"
"f:\FTP"
               7 个文件        510,962 字节
不应该有    【7 个文件        510,962 字节】这行           
               
8 经我肉眼观测,下述目录重复了。但是 f_record.txt中没有列出来
f:\DL\Swords.SoldiersCN\Swords.Soldiers\Data\Fonts\defaultFontButtons\HD
f:\DL\Swords.SoldiersCN\Swords.Soldiers\Data\Fonts\defaultFontButtons\SD

9
f:\111\222\333\444\ 下有   images 这个空目录
f:\aaa\    下有  images 这个空目录
这两个目录下都有同一个空目录images,这种情况,这个脚本把这种情况算是相同了,我认为这是对题理解的不妥.或者没写代码处理这个。

--5楼--
10秒左右结束,提示:
输入记录超过最大长度。请指定更大的最大限度。

请按任意键继续. . .
生成 F_Record.txt = 0


--6楼--
cpu占用28%,磁盘读写一直都是200k左右,运行2小时左右后,磁盘占用基本为0,而cpu占用高了.运行了23小时左右,还没完,我强制关闭了脚本。
貌似在脚本目录生成了3MB多的list.txt,但我删了,我打算抽空重新运行一遍。这个脚本貌似很久会更新一下list.txt
敢问6楼apang:你这脚本测试时运行了多少小时?我这初步看貌似得2---3天!

--8楼--
脚本中,要测试的文件夹,改成f:后,脚本开始了。在脚本目录生成了temp123这个文件夹,和其中的文件,cpu42%,写盘20k每秒.
运行了23小时左右,一点文本还没出来呢,貌似算法和6楼类似,但比6楼还慢。
敢问8楼 wankoilz :你这脚本测试时运行了多少小时?我这初步看貌似得2---3天!
---我的疑惑---
关于第九题,你们是怎样测试自己的代码的?用了多久?测过其他人的代码么?我建议大家在自己机子上测测。

---第九题测试结论---
1 虽然有很多毛病,相对全的,相对快的是3楼脚本。   ----3楼道:“说那么多废话,还不是我第一?!”
2 倒数第一的应该是5楼。
3 6楼,8楼脚本都太慢。我看至少要3天3夜,这还是我这机子。
【第九题测试 完】
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

本帖最后由 PowerShell 于 2013-9-13 12:26 编辑

关于第九题,各位的代码
1 能完成此功能么?我产生了疑惑。当然是要那种无特殊字符缺陷的,所有都能取出的。
2 这种程序,扫完一个盘符,最快是多快?
3 我不太会bat。我想知道powershell处理这个问题会如何:
3.1 powershell能完全取出么?----我假想是的。
3.2 powershell处理这些有多快?----我假想应该在1小时内,甚至更快。
3.3 powershell处理这些占用了多少cpu?多少磁盘?----我想不出。

带着这三个问题,我开始了powershell版的解题代码,编写中,敬请期待。。。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

啊啊啊,居然是我拿第一?感觉像做梦,嗯嗯,高兴ing
感谢斑竹!感谢管理员!!!

TOP

回复 25# PowerShell

首先感谢测试 关于测试代码生成的文件 大小一样目录不一样的问题 可能是因为代码判断的不同
其中用FINDSTR 的代码可能会遇特殊字符时和搜索字符长度相关时会有问题
用FC应该没此类问题 此前有说明的
再次感谢测试
也来感谢斑竹!感谢管理员!

TOP

我就看着,超高深。

TOP

此楼用于 上powershell脚本
  1. <#
  2. 第九题
  3. 根据题意,a目录下有b目录,c文件,d文件。和a目录下有c文件,d文件。为相同目录。也就是说,忽略这个目录中的子目录。
  4. 本脚本在powershell命令行窗口运行时遇  $RECYCLE.BIN ,\System Volume Information, 之类的目录将显示错误,这是正常的,不用理会。
  5. 欢迎测试
  6. #>
  7. Write-Host   "把F盘中存在重复情况的目录列举出来`r
  8. 注意:`r
  9. 只要文件夹中的文件列表相同,就认为是重复的文件夹,不需要判断大小、日期、md5等。"
  10. [system.reflection.assembly]::loadwithpartialname("System.text.encoding") | Out-Null
  11. function get-hash-md5($多行字符串)
  12. {
  13. $md5 = [System.Security.Cryptography.MD5]::Create()
  14. $字节数组 = [system.text.encoding]::Unicode.getbytes($多行字符串)
  15. $md5.ComputeHash($字节数组) | foreach -Begin{$filemd5hashcode=''} -Process{$filemd5hashcode += "{0:x2}" -f $_} -End{return $filemd5hashcode}
  16. }
  17. function pause2
  18. {
  19. Read-Host "已经暂停,请按回车继续 ..."
  20. }
  21. [system.reflection.assembly]::loadwithpartialname("System.Text") | Out-Null
  22. [int32]$long = 1024 * 1024 * 128 #128MB
  23. $大字符串 = New-Object System.Text.StringBuilder($long)
  24. $f盘所有目录 = Get-ChildItem f:\  -Recurse -Force  | Where-Object {($_.PsIsContainer -eq $true) -and ( $_.GetFiles().Count -ne 0)}
  25. write-host "需要处理的目录数为:"  $f盘所有目录.Length
  26. foreach ($aaa in $f盘所有目录)
  27. {
  28. $文件名列表哈希 = get-hash-md5 $aaa.GetFiles().name
  29. $字符串 = "" + $aaa.GetFiles().Count + "`t" + $aaa.FullName + "`t" +  $文件名列表哈希
  30. $大字符串.AppendLine($字符串) | Out-Null
  31. # pause2
  32. }
  33. Add-Content "d:\f盘重复目录信息.txt" -value $大字符串
  34. #哈希值相同的,目录为重复目录,格式为:
  35. #47 F:\下载 1b7ae701a986cef7046ae48830315946
  36. write-host '------------------------脚本第二部分,对【d:\f盘重复目录信息.txt】进行数据处理-------------------------------'
  37. #
  38. $第一步 = Get-Content d:\f盘重复目录信息.txt | Select-Object @{N="目录路径";E={[string]$_.split("`t")[1]}},@{N="文件名列表哈希2";E={[string]$_.split("`t")[2]}} |Group-Object 文件名列表哈希2
  39. foreach ( $aaa in   $第一步 )
  40. {
  41. if  ($aaa.count -gt 1)
  42. {
  43. $aaa.group.目录路径 >>   d:\f盘重复目录最终结果.txt
  44. "-----------------------------------------------"          >>   d:\f盘重复目录最终结果.txt
  45. }
  46. }
复制代码
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

本帖最后由 apang 于 2013-9-15 17:23 编辑

回复 24# PowerShell


   
敢问6楼apang:你这脚本测试时运行了多少小时?我这初步看貌似得2---3天!


此代码运行速度与分区中目录总数及文件总数有关,与相同的目录个数有关,而与硬盘数据大小没有直接关系。本人代码没有考虑分区中目录总数几千几万,文件总数几万几亿的情况。

在我的本本上(acer aspire 4750g,Win7 sp1),d:盘 1018个目录,7859个文件,测试用时10分14秒,生成List.txt大小44.9KB,List.txt中相同目录个数为451个

-------------------------------------------------------------------------------------------------------------

今天又测试,代码第12行改成: if /i not "%%a.tx"=="%%b" if not "!#%%a!!#%%~nb!"=="11" (
同样测试D盘,效率有所提高,用时=4分38秒,生成的List.txt与修改前相同

TOP

返回列表