批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖
本帖最后由 batman 于 2012-2-28 12:21 编辑

此帖为示例:
------------------------------------------------
  因为本人日常要处理大量的数据,为了提高工作效率,本人经常自己编写一些批处理和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"
复制代码
------------------------------------------------
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
1

评分人数

***共同提高***

TOP

本帖最后由 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
复制代码
1

评分人数

TOP

这两天我想重新整合我的智能菜单,让它变成一个资源管理器,可以管理文件,也可以管理文件内容。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 18# cjiabing


期待ing
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html

我帮忙写的代码不需要付钱,不用找我要支付宝或微信账号。如果一定要给,请到微信群给大家发红吧。

TOP

本帖最后由 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返回值进行处理。见谅
1

评分人数

x0day.sinaapp.com

TOP

语言: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
复制代码
1

评分人数

TOP

本帖最后由 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
复制代码

TOP

现在批处理能用舞的地方太少了,不知道楼主能不能提供把批处理转换成可执行文件就好了。

TOP

回复 25# ghl621


http://www.bathome.net/thread-3981-1-1.html
最后三个工具都行
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html

我帮忙写的代码不需要付钱,不用找我要支付宝或微信账号。如果一定要给,请到微信群给大家发红吧。

TOP

回复 26# Batcher


    老大真行还是你厉害,谢谢了!

TOP

今天要截止了吧

TOP

回复 28# yuihi


是的
要抓紧时间了
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html

我帮忙写的代码不需要付钱,不用找我要支付宝或微信账号。如果一定要给,请到微信群给大家发红吧。

TOP

原来还有时间截止,看来今晚我也试试~
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 30# cjiabing


做完文件管理篇,还有别的篇要做呢。
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html

我帮忙写的代码不需要付钱,不用找我要支付宝或微信账号。如果一定要给,请到微信群给大家发红吧。

TOP

回复 31# Batcher


    哈哈,继续加油啊!~昨晚尝试的批处理资源管理器:http://www.bathome.net/thread-16110-1-1.html ,尚未完成,今晚继续。
    话说昨晚论坛突然登陆失败,害得我只好睡觉了。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

返回列表