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

[其他] 2013年度批处理之家BAT编程比赛

用户ID排名奖励发奖
apang1赠送价值200元的礼品2013-09-15 已经发奖
terse2赠送价值100元的礼品2013-09-15 已经发奖
wankoilz3赠送价值100元的礼品2013-09-15 已经发奖
xxpinqz4赠送价值50元的礼品 
5230666805赠送价值50元的礼品 
ShadowFiend6赠送价值50元的礼品2013-09-17 已经发奖

本次比赛只允许使用BAT和XP系统自带的命令行工具,不允许调用 mshta、VBS、PowerShell、JS 等其它脚本和第三方命令行工具(特别注明的个别题目除外)。

参赛时间:
2013-07-19 ~ 2013-08-19

奖项设置:
一等奖:1名,赠送价值200元的礼品
二等奖:2名,赠送价值100元的礼品
三等奖:3名,赠送价值50元的礼品

评分规则:
每个题目30分,其中功能性能占20分,代码规范占10分。
对于总得分相同的用户,以提交答案的时间先后顺序排名。

比赛题目:

1、删除文件夹 D:\BatHome
注意:
(1)该文件夹下面包含文件和子文件夹
(2)可以使用 rd 或 rmdir 命令,但是不允许使用它们的 /s 选项
(3)需要在程序中模拟 rd /s 的递归删除功能

2、检查系统里面是否有非法增加和减少的用户账号
注意:
(1)假设文件 D:\BatHome_User_List.txt 里面保存着所有的合法用户的列表
(2)需要分别找出当前系统里面非法增加的账号和减少的账号

3、批量创建100个系统账号 BatHome001 ~ BatHome100
注意:
(1)每个密码都是一个8位随机字符串,只要包含一个大写字母、一个小写字母、一个数字、一个特殊字符
(2)特殊字符是指除了数字和大小写字母之外的其它字符
(3)不能有重复的密码

4、把系统目前运行的情况记录到文件 D:\BatHome_OS.txt
包括:
(1)物理内存总量是多少(以GB为单位)?目前使用率是多少?
(2)硬盘每个分区的总容量和使用率分别是多少(以GB为单位)?
(3)最近一次开机之后系统已连续运行多长时间(以秒为单位)?

5、把文件夹 D:\www.bathome 下面的文件和子文件夹备份到 D:\bbs.bathome 下面
注意:
(1)备份的时候跳过以下子文件夹:
    logs
    img
(2)备份的时候跳过以下文件:
    *.zip
    *.bak
(3)周一到周六执行增量备份,周日执行完整备份。

6、计算任意两数值的商,要求精确到小数点后100位(没有100位的补足100位)。

7、批量下载壁纸
注意:
(1)下载桌酷网站(http://www.zhuoku.com/)的壁纸,输入一个系列图片的网址,然后自动把这个系列的图片全部下载下来。
(2)能使用常用的几个第三方下载工具

8、将大写的中文数字金额排序
注意:
(1)数值小于一千万元,最小单位为分
(2)中文数字与阿拉伯数字的对应规则参考:http://baike.baidu.com/view/1624026.htm
(3)大写的中文数字金额可以用下表做测试:

陆拾叁万贰仟伍佰肆拾叁圆叁角整
伍万圆整
捌万零肆佰圆伍角叁分
壹佰圆整
贰佰万叁仟贰佰陆拾陆圆零叁分
柒佰柒拾万零捌拾叁圆整
叁万圆肆角肆分
壹圆整

9、把F盘中存在重复情况的目录列举出来
注意:
(1)只要文件夹中的文件列表相同,就认为是重复的文件夹,不需要判断大小、日期、md5等。例如:
F:\PIC\SELECT\ANDROID
    001.jpg
    002.jpg
    003.jpg
    004.jpg
    005.jpg
    LOGO.jpg

F:\Backup\picture\2013-03-03\ANDROID
    001.jpg
    002.jpg
    003.jpg
    004.jpg
    005.jpg
    LOGO.jpg

F:\Rogar\Userfiles\temp\picture
    001.jpg
    002.jpg
    003.jpg
    004.jpg
    005.jpg
    LOGO.jpg

10、将网上下载的txt文本转成html文件以便阅读
注意:
(1)保留txt中的换行格式(在html中加入</br>单标签来实现)
(2)因txt文本中每行前没有空格,请在转化时在行前加入四个半角空格(在html中 为一个半角空格)
(3)遇文本中形如“第一章 我们的宇宙图像”的单行即为段落分隔处,请在前面加入一空行(请考虑尽可能多的章节的书写情况)
(4)抛弃文本中形如“图1.2”的单行(请考虑.前后数值不仅仅为个位的情况)
(5)因为文本可能会含有特殊字符,代码应做特殊字符处理
(6)提示:请注意html文件的基本元素<html><body>标签的加入
(7)附件中的文件仅供测试
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

好高兴,可以学到很多东西了

TOP

新人路過學習下、、

TOP

回复 31# PowerShell


    powershell是强大点!
ssk

TOP

有没有比赛战果展示?
ssk

TOP

这些一定都是高手的高手

TOP

开始发奖
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP



第九题,验证结果,只对脚本不对人。我觉得这是磁盘密集型程序.
测试机 硬盘=raid5=各类杂数据600G   cpu=i5 4670=3.7G=4核 按说cpu硬盘算较快的,
现在公司文件服务器上的数据,动辄3---4tb不新鲜。600g不算多。根目录+各级非空子目录=2万多个,也不算多。
想知道你的f盘,总共有多少个非空目录么?用下述语句即可:
  1. $f盘所有目录 = Get-ChildItem f:\  -Recurse -Force  | Where-Object {($_.PsIsContainer -eq $true) -and ( $_.GetFiles().Count -ne 0)}
  2. 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秒】给大家砸来出点,写脚本的激情。
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的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

此楼用于 上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

我就看着,超高深。

TOP

回复 25# PowerShell

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

TOP

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

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

本帖最后由 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

返回列表