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

有奖活动20120218:批处理在生活和工作中的实际应用之文件管理篇(已发奖)

  [复制链接]
发表于 2012-2-28 12:00:53 | 显示全部楼层
此帖为示例:
------------------------------------------------
  因为本人日常要处理大量的数据,为了提高工作效率,本人经常自己编写一些批处理和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技术 +1 收起 理由
Batcher + 1 感谢分享

查看全部评分

发表于 2012-3-5 18:08:57 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
Batcher + 1 感谢分享

查看全部评分

发表于 2012-3-6 19:16:41 | 显示全部楼层
这两天我想重新整合我的智能菜单,让它变成一个资源管理器,可以管理文件,也可以管理文件内容。
 楼主| 发表于 2012-3-7 13:01:17 | 显示全部楼层
回复 18# cjiabing


期待ing
发表于 2012-3-10 18:21:03 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
Batcher + 1 感谢分享

查看全部评分

发表于 2012-3-12 11:08:04 | 显示全部楼层
语言: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技术 +1 收起 理由
Batcher + 1 感谢分享

查看全部评分

发表于 2012-3-16 11:49:21 | 显示全部楼层
本帖最后由 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

复制代码
发表于 2012-3-28 14:34:12 | 显示全部楼层
现在批处理能用舞的地方太少了,不知道楼主能不能提供把批处理转换成可执行文件就好了。
 楼主| 发表于 2012-3-28 19:26:24 | 显示全部楼层
回复 25# ghl621


http://www.bathome.net/thread-3981-1-1.html
最后三个工具都行
发表于 2012-3-29 10:14:18 | 显示全部楼层
回复 26# Batcher


    老大真行还是你厉害,谢谢了!
发表于 2012-3-31 10:28:59 | 显示全部楼层
今天要截止了吧
 楼主| 发表于 2012-3-31 20:02:45 | 显示全部楼层
回复 28# yuihi


是的
要抓紧时间了
发表于 2012-3-31 21:25:06 | 显示全部楼层
原来还有时间截止,看来今晚我也试试~
 楼主| 发表于 2012-3-31 21:47:42 | 显示全部楼层
回复 30# cjiabing


做完文件管理篇,还有别的篇要做呢。
发表于 2012-4-1 07:17:12 | 显示全部楼层
回复 31# Batcher


    哈哈,继续加油啊!~昨晚尝试的批处理资源管理器:http://www.bathome.net/thread-16110-1-1.html ,尚未完成,今晚继续。
    话说昨晚论坛突然登陆失败,害得我只好睡觉了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 03:09 , Processed in 0.023385 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表