标题: 有奖活动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元的奖品。
评分结果:
参赛者 | 楼层 | 总得分 | 名次 |
yuihi | 17, 21 | 26 | 1 |
fstaizi | 24 | 23 | 2 |
copp_x | 20 | 22 | 3 |
manhua | 23 | 16 | |
==================================================================
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个以原文件名+下划线+分表名命名的分表:- If WScript.Arguments(0) = "" Then WScript.Quit
- Set oexcel = CreateObject("excel.application")
- Set fso = CreateObject("scripting.filesystemobject")
- name = fso.GetFile(WScript.Arguments(0)).name
- ext = fso.GetExtensionName(WScript.Arguments(0))
- path = fso.GetFile(WScript.Arguments(0)).parentfolder & "\" & Replace(name, "." & ext, "_")
- oexcel.Visible = False
- oexcel.Workbooks.Open(WScript.Arguments(0))
- oexcel.ActiveWorkbook.sheets(1).activate
- For Each str In oexcel.ActiveSheet.rows(1).value
- If str <> "" Then
- oco = oco + 1
- head = head & oexcel.Cells(1, oco).value & vbTab
- End If
- Next
- arr = Split(head, vbTab)
- For i = o To UBound(arr) - 2
- str = str & arr(i) & vbTab
- Next
- head = str
- For Each str In oexcel.ActiveSheet.columns(1).value
- If str <> "" Then oro = oro + 1
- Next
- For i = 2 To oro
- file = oexcel.Cells(i, oco).value & ".xls"
- If Not fso.FileExists(path & file) Then fso.CreateTextFile(path & file, True, False).Write head & vbCrLf
- For j = 1 To oco - 1
- vbstr = vbstr & oexcel.Cells(i, j) & vbTab
- Next
- fso.OpenTextFile(path & file, 8, True).Write vbstr & vbCrLf : vbstr = ""
- Next
- oexcel.Workbooks.Close
- Set oexcel = Nothing
- MsgBox "ok"
复制代码
------------------------------------------------
作者: yuihi 时间: 2012-3-5 18:08
本帖最后由 yuihi 于 2012-3-5 18:10 编辑
功能:对200W行的TXT进行汇总,计算相同行的数量,可用于去除重复的行。
批处理实现优势:可处理大量数据(EXCEL2010最多200W行);速度更快;可制成定时任务。
代码如下:- @echo off
- set num=-1
- cd.>result.txt
- >>result.txt echo 小区号 人数
- setlocal enabledelayedexpansion
- for /f %%i in (vlr11.txt) do (
- set /a num+=1
- set second=!first!
- set first=%%i
- if not "!second!"=="" if !second! neq !first! (>>result.txt echo !second! !num!&set num=0)
- )
- set /a num+=1
- >>result.txt echo %first% %num%
- ren result.txt "%date%".xls
- del /q vlr11.txt
复制代码
代码描述:将VLR11.TXT进行汇总生成当前日期为名字的XLS文件。取第一行赋值FIRST,将FIRST传递SECOND,再取下一行赋值FIRST。将FIRST与SECOND进行比较,即当前行与前一行进比较,相同继续;不同输入至RESULT.TXT。
上面的代码多次使>>,导致速度很慢(前两天在批处理论坛上找到原因,非常感谢论坛的帮助及受益)。做了小小的修改,时间由40多分钟减至3分钟。代码如下:- @echo off
- set num=-1
- cd.>result.txt
- >>result.txt echo 小区号 人数
- setlocal enabledelayedexpansion
- (for /f %%i in (vlr11.txt) do (
- set /a num+=1
- set second=!first!
- set first=%%i
- if not "!second!"=="" if !second! neq !first! ( echo !second! !num!&set num=0)
- ))>>result.txt
- set /a num+=1
- >>result.txt echo %first% %num%
- ren result.txt "%date%".xls
- 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- 'author:DM_,date:2012-1-27
- 'blog :http://x0day.sinaapp.com
- Dim fso,folderPath,folders,SubFolders
- folderPath = "c:\temp" '这里是需要批量修改文件名的文件夹的位置
- Set fso = CreateObject("scripting.filesystemobject")
-
- fileName_change folderPath
-
- Sub fileName_change(folderPath)
- Set folders = fso.GetFolder(folderPath)
- Set subFolders = folders.SubFolders
- Set files = folders.Files
-
- For Each file In files
- fileName = file.Name
- change_name = InputBox (file.Path,,filename)
- If Not change_name = filename Then
- If fso.FileExists(change_name) Then
- file.Name = change_name
-
- MsgBox "已将"&filename&_
- " 修改为:"&change_name
- Else MsgBox "file exists!"
- End If
-
- End If
-
- Next
- For Each folder In SubFolders'递归搜索
- fileName_change(folder.Path)
- Next
- 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计划任务的批处理,希望对大家的日常办公有所帮助。- '网络的价值,在于你我的共享及经验的分享'
- '让你我的努力促进网络的发展,从而让自己从中受益。尊重作者,尊重原创……'
- ' ---------------yuihi---------------2012-3-12
- # $language = "VBScript"
- # $interface = "1.0"
- Const ForReading = 1
- Const ForWriting = 2
- Const ForAppending = 8
-
- Sub Main
- dingshi=hour(now)
- if dingshi<23 then
- exit sub
- end if
- crt.Screen.Synchronous = True 'CRT可见
- Dim fso, file,chengname,dingshi,zmvi,hlr2,hlr3,hlr4,all,app,wb,ws '定义变量
-
- chengname=Year(now)&"年"&Month(now)&"月"&Day(now)&"日"'取当前日期赋给变量chengname
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set file = fso.OpenTextFile("D:\漫游用户\" &chengname &".txt", ForAppending, True)
-
- crt.Screen.Send "***SSG2" & chr(13)
- crt.Screen.WaitForString "ENTER USERNAME < " & chr(8) & " "
- crt.Screen.Send "****" & chr(13)
- crt.Screen.WaitForString "ENTER PASSWORD < " & chr(8) & " "
- crt.Screen.Send "************" & chr(13)
- crt.Screen.WaitForString "< " & chr(8) & " "
- crt.Screen.Send "ZMVI;" & chr(13) & Chr(10)
-
-
-
- crt.Screen.WaitForStrings("COMMAND EXECUTED")
- screenrow = crt.screen.CurrentRow - 2
- readline = crt.Screen.Get(screenrow, 14, screenrow, 20 )
- zmvi=readline
-
-
- crt.Screen.Send "ZMVF::HLR=861376649000;" & chr(13) & Chr(10)
- crt.Screen.WaitForStrings("COMMAND EXECUTED")
- screenrow = crt.screen.CurrentRow - 2
- readline = crt.Screen.Get(screenrow, 8, screenrow, 14 )
- hlr2=readline
-
-
- crt.Screen.Send "ZMVF::HLR=861387930000;" & chr(13)
- crt.Screen.WaitForStrings("COMMAND EXECUTED")
- screenrow = crt.screen.CurrentRow - 2
- readline = crt.Screen.Get(screenrow, 8, screenrow, 14 )
- hlr3=readline
-
-
- crt.Screen.Send "ZMVF::HLR=861518034000;" & chr(13)
- crt.Screen.WaitForStrings("COMMAND EXECUTED")
- screenrow = crt.screen.CurrentRow - 2
- readline = crt.Screen.Get(screenrow, 8, screenrow, 14 )
- hlr4=readline
-
-
- crt.Screen.Send "ZMVF::LAC=ALL,;" & chr(13)
- crt.Screen.WaitForStrings("COMMAND EXECUTED")
- screenrow = crt.screen.CurrentRow - 2
- readline = crt.Screen.Get(screenrow, 8, screenrow, 14 )
- all=readline
-
-
- Set app = CreateObject("Excel.Application")
- app.DisplayAlerts=FALSE
- app.visible=FALSE
- Set wb = app.Workbooks.Open("D:\漫游用户\GS2漫游数每日登记表.xls")
- Set ws = wb.Worksheets(1)
- app.WorkSheets(1).Activate
-
- app.range("A2").Value ="GS2"
- app.range("B2").Value =now
- app.range("C2").Value =zmvi
- app.range("D2").Value =hlr2
- app.range("E2").Value =hlr3
- app.range("F2").Value =hlr4
- app.range("G2").Value =all
- app.range("H2").Value ="=G2-F2-E2-D2"
- app.rows(2).insert
- app.save
- wb.close
- app.quit
- set app=nothing
- set wb=nothing
- set ws=nothing
-
- crt.Screen.Send "Z;"
- crt.Screen.Send chr(13)
- crt.Screen.WaitForString "< " & chr(8) & " "
- crt.Screen.Send "Z;" & chr(13)
- crt.Screen.WaitForString "srwork >"
- crt.Screen.Send "***SSG1" & chr(13)
- crt.Screen.WaitForString "ENTER USERNAME < " & chr(8) & " "
- crt.Screen.Send "****" & chr(13)
- crt.Screen.WaitForString "ENTER PASSWORD < " & chr(8) & " "
- crt.Screen.Send "*******" & chr(13)
- crt.Screen.WaitForString "< " & chr(8) & " "
- crt.Screen.Send "ZMVI;" & chr(13) & Chr(10)
- crt.Screen.Send "ZMVF::HLR=861376649000;" & chr(13)
- crt.Screen.Send "ZMVF::HLR=861387930000;" & chr(13)
- crt.Screen.Send "ZMVF::HLR=861518034000;" & chr(13)
- crt.Screen.Send chr(13)
- crt.Screen.Send "ZMVF::LAC=ALL,;" & chr(13)
-
- crt.Screen.WaitForString Chr(10)
- crt.Screen.Send "Z;"
- Dim waitStrs
- waitStrs = Array( Chr(10), "Z;" )
- Dim row, screenrow, readline, items
- row = 1
- Do
- While True
- result = crt.Screen.WaitForStrings( waitStrs )
- If result = 2 Then
- Exit Do
- End If
- screenrow = crt.screen.CurrentRow - 1
- readline = crt.Screen.Get(screenrow, 1, screenrow, 50 )
- file.Write readline & vbCrLf
- Wend
- Loop
-
- crt.Screen.Send chr(13)
- crt.Screen.WaitForString "< " & chr(8) & " "
- crt.Screen.Send "Z;" & chr(13)
- 'crt.Screen.WaitForString "< " & chr(8) & " "
- crt.Screen.WaitForString "srwork >"
- crt.Screen.Send "***SSG2" & chr(13)
- crt.Screen.WaitForString "ENTER USERNAME < " & chr(8) & " "
- crt.Screen.Send "****" & chr(13)
- crt.Screen.WaitForString "ENTER PASSWORD < " & chr(8) & " "
- crt.Screen.Send "************" & chr(13)
- crt.Screen.WaitForString "< " & chr(8) & " "
- crt.Screen.Send "ZMVI;" & chr(13) & Chr(10)
- crt.Screen.Send "ZMVF::HLR=861376649000;" & chr(13)
- crt.Screen.Send "ZMVF::HLR=861387930000;" & chr(13)
- crt.Screen.Send "ZMVF::HLR=861518034000;" & chr(13)
- crt.Screen.Send chr(13)
- crt.Screen.Send "ZMVF::LAC=ALL,;" & chr(13)
- crt.Screen.Send "ZZZ;"
- crt.Screen.WaitForString Chr(10)
-
- waitStrs = Array( Chr(10), "ZZZ;" )
-
- row = 1
- Do
- While True
- result = crt.Screen.WaitForStrings( waitStrs )
- If result = 2 Then
- Exit Do
- End If
- screenrow = crt.screen.CurrentRow - 1
- readline = crt.Screen.Get(screenrow, 1, screenrow, 50 )
- file.Write readline & vbCrLf
- Wend
- Loop
- crt.Screen.Send chr(13)
- crt.screen.synchronous = false
- crt.Screen.WaitForStringS "srwork >"
- crt.session.disconnect
- CRT.QUIT
- End Sub
复制代码
SecuerCRT的VBS命令集:- TabCount = crt.GetTabCount() ‘获取当前已打开的标签总数
- Set tab = crt.GetTab(index)获取相应索引的标签
- tab = crt.session.Connectintab("/s IP专网/AR")’打开会话中的标签
- tab.Session.Connect标签连接
- tab.activate激活标签
- tab.Session.Connected = True判断标签会话是否已连接
- Name = tab.Caption获取标签的名称
- crt.session.Connect "/telnet 10.178.153.194 8023" TELNET方式连接IP加端口
- crt.session.disconnect 中断会话连接
- CRT.QUIT 退出CRT
- crt.sleep 1000 等待1秒
- crt.screen.send "show interface description" &vbCr 向屏幕发送指令加回车
- crt.Screen.WaitForString "[JXSHR-MC-CMNET-BRAS01-ME60]" 在屏幕上等待字符串,然后再运行下一条
- screenrow = crt.screen.CurrentRow – 1 定义屏幕当前行数
- readline = crt.Screen.Get(screenrow, 8, screenrow, 14 ) 截取屏幕上相应的字符
复制代码
用批处理定时打开CRT中指令的脚本- "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脚本。- @echo off
- echo set sh=CreateObject("WScript.Shell")>2.vbs
- (for /l %%a in (4 1 50) do (
- echo WScript.Sleep 300
- echo sh.SendKeys "open 192.168.16.%%a"
- echo WScript.Sleep 300
- echo sh.SendKeys "{ENTER}"
- echo WScript.Sleep 1000
- echo sh.SendKeys "username{ENTER}"
- echo WScript.Sleep 300
- echo sh.SendKeys "password{ENTER}"
- echo WScript.Sleep 300
- echo sh.SendKeys "con t{ENTER}"
- echo WScript.Sleep 300
- echo sh.SendKeys "no aaa accounting network default{ENTER}"
- echo WScript.Sleep 300
- echo sh.SendKeys "end{ENTER}"
- echo WScript.Sleep 300
- echo sh.SendKeys "write{ENTER}"
- echo WScript.Sleep 300
- echo sh.SendKeys "exit{ENTER}"
- echo WScript.Sleep 300
- echo sh.SendKeys "{ENTER}"
- echo WScript.Sleep 300
- echo sh.SendKeys "{ENTER}"
- echo WScript.Sleep 300
- echo sh.SendKeys "{ENTER}"
- ))>>2.vbs
- start telnet
- 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 |