Board logo

标题: 有奖活动20120218:批处理在生活和工作中的实际应用之文件管理篇(已发奖) [打印本页]

作者: Batcher    时间: 2012-2-18 09:43     标题: 有奖活动20120218:批处理在生活和工作中的实际应用之文件管理篇(已发奖)

讨论话题:
1、文件批量重命名
2、删除过期文件
3、压缩、备份
4、查找浪费磁盘空间的大文件
5、分类整理文件
6、文件合并、分割
7、文件内容排序、去重复
8、其它

活动时间:
2012-02-20至2012-03-31

评委嘉宾:
CrLf: 批处理区〖代码咨询&讨论〗版主
broly: VBS版主
zqz0012005: 超级版主
batman: 超级版主

活动奖励:
针对以上一个或多个话题跟帖参与讨论,给出应用背景、完整代码、使用方法等,建议除代码之外的文字描述不少于100字。活动结束之后,由评委嘉宾选出前三名,前三名分别赠送价值50元的奖品。

评分结果:

参赛者楼层总得分名次
yuihi17, 21261
fstaizi24232
copp_x20223
manhua2316


==================================================================

2012-04-27颁发奖励
作者: batman    时间: 2012-2-18 11:12

这个策划很cool,能充分挖掘出批处理在文件管理这一实际应用上的作用,同时也给了大家一个积极动手的机会,没说的,支持!
作者: yhcbird    时间: 2012-2-20 14:12

帮顶,这才是批处理的真谛。。。最实用才是根本
作者: fanfande    时间: 2012-2-20 15:17

经常用文档批处理!
深知批处理给工作带来的方便!提高效率
没的说,这个我顶了
作者: fanfande    时间: 2012-2-20 15:40

顺便询问powbat谁有见到过啊
作者: garyng    时间: 2012-2-22 21:13

有个问题:
能用第三方程序么?
作者: Batcher    时间: 2012-2-22 21:57

回复 6# garyng


实际的生活和工作中是怎样的就是怎样的。
作者: garyng    时间: 2012-2-23 19:55

回复 7# Batcher


    哦。。就是说 如果我有用第三方来完成某个任务 就用第三方咯?
作者: Batcher    时间: 2012-2-23 20:39

回复 8# garyng


没钱买船票的话,就买个轮胎吧。
作者: wangtao6312    时间: 2012-2-24 15:32

很好的创意,支持。
作者: cjiabing    时间: 2012-2-24 17:04

本帖最后由 cjiabing 于 2012-2-24 17:07 编辑

学了批处理后,吃得饱,睡得香,也不做噩梦了,精神好了,身体倍棒,用洁宝,没有蚊虫咬!~……

1、写个《同名文件夹病毒专杀》杀毒,U盘病毒手到病除!~
2、写个《BatMPlayerV2.2Beta.bat》播放器,倒杯咖啡听听歌、看看小片!~
3、上班玩玩Defanive的《Mota》、netbenton的《五棋子人机对战》,工作没那么无聊!~想做斗地主,可逻辑太混乱了~
4、偶尔做做白日梦,把Batcher的《福利彩票双色球自动选号器之批处理彩色版》当娱乐@~
5、兴致来了在办公室电脑弄个《批处理广播系统》吵吵大家!~有时候也给大伙制定个排班表什么的!~
6、有时候想查星期几,只好查《批处理版万年历》!~
7、有时候做个考试系统,英语学习系统,方便复习!~
8、做个《定时任务工具v2.1.bat》,每天提醒自己按时吃饭睡觉!~
9、有时候也不过是为了改改右键菜单什么的,不想每次都去找地方解决!~
10、总是不喜欢千篇一律的报告,弄一个智能作文模板!~
11、有时候纯粹是为了刷流量!~
12、有时候想搞个恶作剧!~
13、有时候也就是讨某某人喜欢!~

为啥Batcher提出的讨论话题我都很少接触呢,为啥我总是这样玩物丧志?生活太伤感,我只想偷懒,批处理是我的好保姆!~
作者: cjiabing    时间: 2012-2-25 00:05

顺便提一个问题:
————有谁会弄手机下的cmd?
作者: find    时间: 2012-2-25 09:00

回复 12# cjiabing


安卓系统吗?Linux类的终端软件倒是挺多
没用过windows的手机系统,也许有吧
作者: BillGates    时间: 2012-2-25 13:41

回复 12# cjiabing
目前用着塞班机,有个minicmd的软件,可以算是手机的cmd吧,用起来和电脑的差不多。
作者: batman    时间: 2012-2-28 11:48

大家基本在跑题。。。
作者: batman    时间: 2012-2-28 12:00

此帖为示例:
------------------------------------------------
  因为本人日常要处理大量的数据,为了提高工作效率,本人经常自己编写一些批处理和vbs脚本进行数据的
批量操作。因为这些批处理和vbs脚本在工作中的加入和使用,使得个人的数据处理能力和效率大幅提升,更是
为本人节省了大量的工作时间和精力。下面这段代码就是本人用vbs代码编写的excel自动分表工具,只要你的
excel表数据中最后一列为需要分表的字段,那么将文件拖放到vbs工具上即可实现将原表按分表字段分解成
n个以原文件名+下划线+分表名命名的分表:
  1. If WScript.Arguments(0) = "" Then WScript.Quit
  2. Set oexcel = CreateObject("excel.application")
  3. Set fso = CreateObject("scripting.filesystemobject")
  4. name = fso.GetFile(WScript.Arguments(0)).name
  5. ext = fso.GetExtensionName(WScript.Arguments(0))
  6. path = fso.GetFile(WScript.Arguments(0)).parentfolder & "\" & Replace(name, "." & ext, "_")
  7. oexcel.Visible = False
  8. oexcel.Workbooks.Open(WScript.Arguments(0))
  9. oexcel.ActiveWorkbook.sheets(1).activate
  10. For Each str In oexcel.ActiveSheet.rows(1).value
  11.   If str <> "" Then
  12.     oco = oco + 1
  13.     head = head & oexcel.Cells(1, oco).value & vbTab
  14.   End If
  15. Next
  16. arr = Split(head, vbTab)
  17. For i = o To UBound(arr) - 2
  18.   str = str & arr(i) & vbTab
  19. Next
  20. head = str
  21. For Each str In oexcel.ActiveSheet.columns(1).value
  22.   If str <> "" Then oro = oro + 1
  23. Next
  24. For i = 2 To oro
  25.   file = oexcel.Cells(i, oco).value & ".xls"
  26.   If Not fso.FileExists(path & file) Then fso.CreateTextFile(path & file, True, False).Write head & vbCrLf
  27.   For j = 1 To oco - 1
  28.     vbstr = vbstr & oexcel.Cells(i, j) & vbTab
  29.   Next
  30.   fso.OpenTextFile(path & file, 8, True).Write vbstr & vbCrLf : vbstr = ""
  31. Next
  32. oexcel.Workbooks.Close
  33. Set oexcel = Nothing
  34. MsgBox "ok"
复制代码
------------------------------------------------
作者: yuihi    时间: 2012-3-5 18:08

本帖最后由 yuihi 于 2012-3-5 18:10 编辑

功能:对200W行的TXT进行汇总,计算相同行的数量,可用于去除重复的行。
批处理实现优势:可处理大量数据(EXCEL2010最多200W行);速度更快;可制成定时任务。
代码如下:
  1. @echo off
  2. set num=-1
  3. cd.>result.txt
  4. >>result.txt echo 小区号 人数
  5. setlocal enabledelayedexpansion
  6. for /f %%i in (vlr11.txt) do (
  7.     set /a num+=1
  8.     set second=!first!
  9.     set first=%%i
  10.     if not "!second!"=="" if !second! neq !first! (>>result.txt echo !second! !num!&set num=0)
  11. )
  12. set /a num+=1
  13. >>result.txt echo %first% %num%
  14. ren result.txt "%date%".xls
  15. del /q vlr11.txt
复制代码
代码描述:将VLR11.TXT进行汇总生成当前日期为名字的XLS文件。取第一行赋值FIRST,将FIRST传递SECOND,再取下一行赋值FIRST。将FIRST与SECOND进行比较,即当前行与前一行进比较,相同继续;不同输入至RESULT.TXT。

上面的代码多次使>>,导致速度很慢(前两天在批处理论坛上找到原因,非常感谢论坛的帮助及受益)。做了小小的修改,时间由40多分钟减至3分钟。代码如下:
  1. @echo off
  2. set num=-1
  3. cd.>result.txt
  4. >>result.txt echo 小区号 人数
  5. setlocal enabledelayedexpansion
  6. (for /f %%i in (vlr11.txt) do (
  7.     set /a num+=1
  8.     set second=!first!
  9.     set first=%%i
  10.     if not "!second!"=="" if !second! neq !first! ( echo !second! !num!&set num=0)
  11. ))>>result.txt
  12. set /a num+=1
  13. >>result.txt echo %first% %num%
  14. ren result.txt "%date%".xls
  15. del /q vlr11.txt
复制代码

作者: cjiabing    时间: 2012-3-6 19:16

这两天我想重新整合我的智能菜单,让它变成一个资源管理器,可以管理文件,也可以管理文件内容。
作者: Batcher    时间: 2012-3-7 13:01

回复 18# cjiabing


期待ing
作者: copp_x    时间: 2012-3-10 18:21

本帖最后由 copp_x 于 2012-3-10 18:23 编辑

之前写过一个脚本 vbs批量修改文件名的 现在拿出分享
原文见于:http://x0day.sinaapp.com/?post=28
  1. 'author:DM_,date:2012-1-27
  2. 'blog :http://x0day.sinaapp.com
  3. Dim fso,folderPath,folders,SubFolders
  4. folderPath = "c:\temp" '这里是需要批量修改文件名的文件夹的位置
  5. Set fso = CreateObject("scripting.filesystemobject")
  6. fileName_change folderPath
  7. Sub fileName_change(folderPath)
  8. Set folders = fso.GetFolder(folderPath)
  9. Set subFolders = folders.SubFolders
  10. Set files = folders.Files
  11. For Each file In files
  12. fileName = file.Name
  13. change_name = InputBox (file.Path,,filename)
  14. If Not change_name = filename Then
  15.      If fso.FileExists(change_name) Then
  16.         file.Name = change_name
  17.      
  18.      MsgBox "已将"&filename&_
  19.             " 修改为:"&change_name
  20.      Else MsgBox "file exists!"
  21.      End If
  22. End If
  23. Next
  24. For Each folder In SubFolders'递归搜索
  25. fileName_change(folder.Path)
  26. Next
  27. End Sub
复制代码
代码有些粗糙,未对使用过程中inputbox和msgbox返回值进行处理。见谅
作者: yuihi    时间: 2012-3-12 11:08

语言:VBS
背景:SecureCRT(用于TELET,相信搞网维的人都很熟悉)
功能介绍:该段代码为我日常工作时所用,每天晚上从两台交换机中取出数据,存入表格及保存LOG文件。功能很简单,代码只实现了每晚自动取,懒人会很感兴趣。
流程介绍:对CRT进行指令输入,截取结果,存入表格或LOG;也可以用EXCEL中或TXT中取数据供CTR输入,然后得到结果。如果在公网,配合上飞信接口的VBS代码,实时监控,会给你有意想不到的结果。这段代码首先输入指令,得到结果,截取字符,存入EXCEL,并将所有的LOG,以当天为文件名存入LOG文件。
缺点:代码一次写完,实现了结果,就没有修改,未分模块,可读性差,本想全部加上注释,因工作忙,也没有很大的意义。我将控制CTR的VBS命令附上,及定制VBS计划任务的批处理,希望对大家的日常办公有所帮助。
  1. '网络的价值,在于你我的共享及经验的分享'
  2. '让你我的努力促进网络的发展,从而让自己从中受益。尊重作者,尊重原创……'
  3. '                                                 ---------------yuihi---------------2012-3-12
  4. # $language = "VBScript"
  5. # $interface = "1.0"
  6. Const ForReading = 1
  7. Const ForWriting = 2
  8. Const ForAppending = 8
  9. Sub Main
  10. dingshi=hour(now)
  11. if dingshi<23 then
  12. exit sub
  13. end if
  14.    crt.Screen.Synchronous = True 'CRT可见
  15.    Dim fso, file,chengname,dingshi,zmvi,hlr2,hlr3,hlr4,all,app,wb,ws '定义变量
  16. chengname=Year(now)&"年"&Month(now)&"月"&Day(now)&"日"'取当前日期赋给变量chengname
  17.   Set fso = CreateObject("Scripting.FileSystemObject")
  18.   Set file = fso.OpenTextFile("D:\漫游用户\" &chengname &".txt", ForAppending, True)
  19. crt.Screen.Send "***SSG2" & chr(13)
  20. crt.Screen.WaitForString "ENTER USERNAME < " & chr(8) & " "
  21. crt.Screen.Send "****" & chr(13)
  22. crt.Screen.WaitForString "ENTER PASSWORD < " & chr(8) & " "
  23. crt.Screen.Send "************" & chr(13)
  24. crt.Screen.WaitForString "< " & chr(8) & " "
  25. crt.Screen.Send "ZMVI;" & chr(13) & Chr(10)
  26. crt.Screen.WaitForStrings("COMMAND EXECUTED")
  27.         screenrow = crt.screen.CurrentRow - 2
  28.         readline = crt.Screen.Get(screenrow, 14, screenrow, 20 )
  29. zmvi=readline
  30. crt.Screen.Send "ZMVF::HLR=861376649000;" & chr(13) & Chr(10)
  31. crt.Screen.WaitForStrings("COMMAND EXECUTED")
  32.         screenrow = crt.screen.CurrentRow - 2
  33.         readline = crt.Screen.Get(screenrow, 8, screenrow, 14 )
  34. hlr2=readline
  35.   
  36. crt.Screen.Send "ZMVF::HLR=861387930000;" & chr(13)
  37. crt.Screen.WaitForStrings("COMMAND EXECUTED")
  38.         screenrow = crt.screen.CurrentRow - 2
  39.         readline = crt.Screen.Get(screenrow, 8, screenrow, 14 )
  40. hlr3=readline
  41. crt.Screen.Send "ZMVF::HLR=861518034000;" & chr(13)
  42. crt.Screen.WaitForStrings("COMMAND EXECUTED")
  43.         screenrow = crt.screen.CurrentRow - 2
  44.         readline = crt.Screen.Get(screenrow, 8, screenrow, 14 )
  45. hlr4=readline
  46. crt.Screen.Send "ZMVF::LAC=ALL,;" & chr(13)
  47. crt.Screen.WaitForStrings("COMMAND EXECUTED")
  48.         screenrow = crt.screen.CurrentRow - 2
  49.         readline = crt.Screen.Get(screenrow, 8, screenrow, 14 )
  50. all=readline
  51.   Set app = CreateObject("Excel.Application")
  52.   app.DisplayAlerts=FALSE
  53.   app.visible=FALSE
  54.   Set wb = app.Workbooks.Open("D:\漫游用户\GS2漫游数每日登记表.xls")
  55.   Set ws = wb.Worksheets(1)
  56.   app.WorkSheets(1).Activate
  57. app.range("A2").Value ="GS2"
  58. app.range("B2").Value =now
  59. app.range("C2").Value =zmvi
  60. app.range("D2").Value =hlr2
  61. app.range("E2").Value =hlr3
  62. app.range("F2").Value =hlr4
  63. app.range("G2").Value =all
  64. app.range("H2").Value ="=G2-F2-E2-D2"
  65. app.rows(2).insert
  66. app.save
  67. wb.close
  68. app.quit
  69. set app=nothing
  70. set wb=nothing
  71. set ws=nothing
  72. crt.Screen.Send "Z;"
  73. crt.Screen.Send chr(13)
  74. crt.Screen.WaitForString "< " & chr(8) & " "
  75. crt.Screen.Send "Z;" & chr(13)
  76. crt.Screen.WaitForString "srwork >"
  77. crt.Screen.Send "***SSG1" & chr(13)
  78. crt.Screen.WaitForString "ENTER USERNAME < " & chr(8) & " "
  79. crt.Screen.Send "****" & chr(13)
  80. crt.Screen.WaitForString "ENTER PASSWORD < " & chr(8) & " "
  81. crt.Screen.Send "*******" & chr(13)
  82. crt.Screen.WaitForString "< " & chr(8) & " "
  83. crt.Screen.Send "ZMVI;" & chr(13) & Chr(10)
  84. crt.Screen.Send "ZMVF::HLR=861376649000;" & chr(13)
  85. crt.Screen.Send "ZMVF::HLR=861387930000;" & chr(13)
  86. crt.Screen.Send "ZMVF::HLR=861518034000;" & chr(13)
  87. crt.Screen.Send chr(13)
  88. crt.Screen.Send "ZMVF::LAC=ALL,;" & chr(13)
  89.    crt.Screen.WaitForString Chr(10)
  90. crt.Screen.Send "Z;"
  91.   Dim waitStrs
  92.   waitStrs = Array( Chr(10), "Z;" )
  93.   Dim row, screenrow, readline, items
  94.   row = 1
  95.   Do
  96.       While True
  97.       result = crt.Screen.WaitForStrings( waitStrs )
  98.       If result = 2 Then
  99.         Exit Do
  100.       End If
  101.       screenrow = crt.screen.CurrentRow - 1
  102.       readline = crt.Screen.Get(screenrow, 1, screenrow, 50 )   
  103.       file.Write readline & vbCrLf
  104.     Wend
  105.   Loop
  106. crt.Screen.Send chr(13)
  107. crt.Screen.WaitForString "< " & chr(8) & " "
  108. crt.Screen.Send "Z;" & chr(13)
  109. 'crt.Screen.WaitForString "< " & chr(8) & " "
  110. crt.Screen.WaitForString "srwork >"
  111. crt.Screen.Send "***SSG2" & chr(13)
  112. crt.Screen.WaitForString "ENTER USERNAME < " & chr(8) & " "
  113. crt.Screen.Send "****" & chr(13)
  114. crt.Screen.WaitForString "ENTER PASSWORD < " & chr(8) & " "
  115. crt.Screen.Send "************" & chr(13)
  116. crt.Screen.WaitForString "< " & chr(8) & " "
  117. crt.Screen.Send "ZMVI;" & chr(13) & Chr(10)
  118. crt.Screen.Send "ZMVF::HLR=861376649000;" & chr(13)
  119. crt.Screen.Send "ZMVF::HLR=861387930000;" & chr(13)
  120. crt.Screen.Send "ZMVF::HLR=861518034000;" & chr(13)
  121. crt.Screen.Send chr(13)
  122. crt.Screen.Send "ZMVF::LAC=ALL,;" & chr(13)
  123. crt.Screen.Send "ZZZ;"
  124.    crt.Screen.WaitForString Chr(10)
  125.   waitStrs = Array( Chr(10), "ZZZ;" )
  126.   row = 1
  127.   Do
  128.       While True
  129.       result = crt.Screen.WaitForStrings( waitStrs )
  130.       If result = 2 Then
  131.         Exit Do
  132.       End If
  133.       screenrow = crt.screen.CurrentRow - 1
  134.       readline = crt.Screen.Get(screenrow, 1, screenrow, 50 )   
  135.       file.Write readline & vbCrLf
  136.     Wend
  137.   Loop
  138. crt.Screen.Send chr(13)
  139. crt.screen.synchronous = false
  140. crt.Screen.WaitForStringS "srwork >"
  141. crt.session.disconnect
  142. CRT.QUIT
  143. End Sub
复制代码
SecuerCRT的VBS命令集:
  1. TabCount = crt.GetTabCount() ‘获取当前已打开的标签总数
  2. Set tab = crt.GetTab(index)获取相应索引的标签
  3. tab = crt.session.Connectintab("/s IP专网/AR")’打开会话中的标签
  4. tab.Session.Connect标签连接
  5. tab.activate激活标签
  6. tab.Session.Connected = True判断标签会话是否已连接
  7. Name =  tab.Caption获取标签的名称
  8. crt.session.Connect "/telnet 10.178.153.194 8023" TELNET方式连接IP加端口
  9. crt.session.disconnect 中断会话连接
  10. CRT.QUIT 退出CRT
  11. crt.sleep 1000 等待1秒
  12. crt.screen.send "show interface description" &vbCr 向屏幕发送指令加回车
  13. crt.Screen.WaitForString "[JXSHR-MC-CMNET-BRAS01-ME60]" 在屏幕上等待字符串,然后再运行下一条
  14. screenrow = crt.screen.CurrentRow – 1 定义屏幕当前行数
  15. readline = crt.Screen.Get(screenrow, 8, screenrow, 14 ) 截取屏幕上相应的字符
复制代码
用批处理定时打开CRT中指令的脚本
  1. "C:\Program Files\SecureCRT\SecureCRT.EXE"    /T /SCRIPT 取BAS利用率.vbs
复制代码

作者: manhua    时间: 2012-3-16 11:49

本帖最后由 manhua 于 2012-3-16 11:51 编辑

语言:VBS+批处理
功能介绍:批量登录并配置交换机
流程介绍:用VBS模拟键盘输入命令行,配置全局变量及vlan之间的通信规则,批处理生成VBS脚本,最后开启telnet功能,并调用VBS脚本。
  1. @echo off
  2. echo set sh=CreateObject("WScript.Shell")>2.vbs
  3. (for /l %%a in (4 1 50) do (
  4.     echo WScript.Sleep 300
  5.     echo sh.SendKeys "open 192.168.16.%%a"
  6.     echo WScript.Sleep 300
  7.     echo sh.SendKeys "{ENTER}"
  8.     echo WScript.Sleep 1000
  9.     echo sh.SendKeys "username{ENTER}"
  10.     echo WScript.Sleep 300
  11.     echo sh.SendKeys "password{ENTER}"
  12.     echo WScript.Sleep 300
  13.     echo sh.SendKeys "con t{ENTER}"
  14.     echo WScript.Sleep 300
  15.     echo sh.SendKeys "no aaa accounting network default{ENTER}"
  16.     echo WScript.Sleep 300
  17.     echo sh.SendKeys "end{ENTER}"
  18.     echo WScript.Sleep 300
  19.     echo sh.SendKeys "write{ENTER}"
  20.     echo WScript.Sleep 300
  21.     echo sh.SendKeys "exit{ENTER}"
  22.     echo WScript.Sleep 300
  23.     echo sh.SendKeys "{ENTER}"
  24.     echo WScript.Sleep 300
  25.     echo sh.SendKeys "{ENTER}"
  26.     echo WScript.Sleep 300
  27.     echo sh.SendKeys "{ENTER}"
  28. ))>>2.vbs
  29. start telnet
  30. cscript //nologo 2.vbs
复制代码

作者: ghl621    时间: 2012-3-28 14:34

现在批处理能用舞的地方太少了,不知道楼主能不能提供把批处理转换成可执行文件就好了。
作者: Batcher    时间: 2012-3-28 19:26

回复 25# ghl621


http://www.bathome.net/thread-3981-1-1.html
最后三个工具都行
作者: ghl621    时间: 2012-3-29 10:14

回复 26# Batcher


    老大真行还是你厉害,谢谢了!
作者: yuihi    时间: 2012-3-31 10:28

今天要截止了吧
作者: Batcher    时间: 2012-3-31 20:02

回复 28# yuihi


是的
要抓紧时间了
作者: cjiabing    时间: 2012-3-31 21:25

原来还有时间截止,看来今晚我也试试~
作者: Batcher    时间: 2012-3-31 21:47

回复 30# cjiabing


做完文件管理篇,还有别的篇要做呢。
作者: cjiabing    时间: 2012-4-1 07:17

回复 31# Batcher


    哈哈,继续加油啊!~昨晚尝试的批处理资源管理器:http://www.bathome.net/thread-16110-1-1.html ,尚未完成,今晚继续。
    话说昨晚论坛突然登陆失败,害得我只好睡觉了。
作者: yuihi    时间: 2012-4-5 08:18

这个贴还没有截止吗
作者: Batcher    时间: 2012-4-5 09:23

回复 33# yuihi


在截至日期的那一天已经截至了,目前评委正在打分。
作者: yuihi    时间: 2012-4-5 09:58

回复 34# Batcher


    哦,我每天都来关注啊,
作者: Batcher    时间: 2012-4-17 18:46

回复 35# yuihi


    已公布
作者: yuihi    时间: 2012-4-21 20:14

,奖品是什么啊,能奖本书给俺不
作者: Batcher    时间: 2012-4-27 18:26

回复 37# yuihi


    PM你了,自己挑吧




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2