VBS助你搜索特定目标

来源 :电脑爱好者 | 被引量 : 0次 | 上传用户:Einsun19791217
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  上期讲到:VBS脚本中,过程(procedure)/函数(function)是构成语句(sentence)的重要部分。VBScript内部函数大致分为:数组处理函数、换算函数、日期/时间函数、格式化字符串函数、输入/输出函数、数学函数、杂项函数、对象函数、舍入函数、脚本引擎 ID 函数、字符串函数和变量(variant)函数等十二类,目前约有89个函数。可以使用Function语句和Sub语句自定义一个过程(函数)来完成各种任务,甚至可以递归(recursive),即该过程调用自身完成给定的任务。Function语句与Sub语句自定义的过程不同之处在于当要使用函数返回值时,可以在表达式的右边使用Function过程,这跟使用内部函数一样,而不能使用Sub过程。无论调用内部函数还是自定义过程,当不使用函数返回值时,可以使用关键字Call用括号把参数列表括起来,否则应当省略参数列表两边的括号。下面介绍For Each...Next循环语句和用法。
  
  一、搜索指定文件给定关键词的文件并将结果输出到文件
  
  Windows的“搜索”功能虽然十分强大,但美中不足有:1.除了一次可以搜索本地硬盘所有分区外无法搜索多个任意指定的文件夹;2.只能在“搜索结果”中对搜索到的文件/文件夹进行查看、编辑、复制、删除或移动操作,无法将搜索到的结果直接输出到文本文档供用户重复使用。本期范例可一次搜索多个任意指定的文件夹(包括分区),提供三个高级选项,并将搜索结果输出到文本文档。由于篇幅有限,本期脚本不支持“?*”通配符(算法要复杂许多),下期脚本范例介绍使用“?*”通配符搜索。
  Const WINDOW_HANDLE = 0, OPTIONS = 16, MY_COMPUTER = 17
  Const ForReading = 1, ForWriting = 2, ForAppending = 8
  Const Sub_Folder = 0, Folder_Name = 1, Match_Case = 2
  On Error Resume Next
  arrOptions = Array(0, 0, 0)
  arrOptionMsg = Array("您希望搜索子文件夹吗?", "您希望搜索文件夹名吗?", _
  "您希望区分大小写搜索吗?")
  For I = 0 To 2
   intValue = MsgBox(arrOptionMsg(I), vbYesNo + vbQuestion, "高级选项")
   If intValue = vbYes Then arrOptions(I) = 1
  Next
  strMsg = "请输入全部或部分文件名,不支持*?通配符,然后单击“确定”。"
  strFindKeyWord = InputBox(strMsg, "要搜索的文件名")
  strMsg = "输入要搜索的文件名无效,程序结束。"
  If strFindKeyWord = "" Then ErrorAndQuit(strMsg)
  strMsg = "请选择要搜索的文件夹,然后单击“确定”。单击“取消”或按"&_
   "“Esc”键结束选择。"
  Set objFso = CreateObject("Scripting.FileSystemObject")
  Set objShell = CreateObject("Shell.Application")
  Do
   Set objFolder = objShell.BrowseForFolder _
   (WINDOW_HANDLE, strMsg, OPTIONS, MY_COMPUTER)
   If objFolder Is Nothing Then Exit Do
   Set objFolderItem = objFolder.Self
   strPath = objFolderItem.Path
   If Not objFso.FolderExists(strPath) Then
  strMsg1 = "无法搜索文件夹“" & objFolderItem & "”,请另选一个。"
  Msgbox strMsg1, vbCritical, "错误" : intMyErr = 1
   End If
   If 0 <> InStr(StrFolders, strPath & vbCrLf) Then
  strMsg1 = "已选择了文件夹“" & strPath & "”,请另选一个。"
  Msgbox strMsg1, vbCritical, "错误" : intMyErr = 1
   ElseIf arrOptions(Sub_Folder) = 1 And intMyErr <> 1 Then
  Set objFolder = objFso.GetFolder(strPath)
  Do Until objFolder.IsRootFolder
   Set objFolder = objFolder.ParentFolder
   If 0 <> InStr(StrFolders, objFolder.Path) Then
  strMsg1 = "所选择文件夹已包含“" & strPath & "”,请另选一个。"
  Msgbox strMsg1, vbCritical, "错误" : intMyErr = 1 : Exit Do
   End If
  Loop
   End If
   If intMyErr = 0 Then StrFolders = StrFolders & strPath & vbCrLf
   intMyErr = 0
  Loop
  strMsg = "没有选择任何可搜索的文件夹,程序结束。"
  If StrFolders = "" Then ErrorAndQuit(strMsg)
  arrFolders = Split(strFolders, vbCrLf)
  ReDim Preserve arrFolders(UBound(arrFolders) - 1)
  strFoundFile = ""
  For Each strFolder In arrFolders
   SearchTheName objFso.GetFolder(strFolder)
  Next
  strSearchFile = "C:\Search.txt"' 搜索结果输出文件可设置为自己的文件
  Set objFile = objFso.OpenTextFile(strSearchFile, ForWriting, True)
  objFile.Write strFoundFile
  objFile.Close
  MsgBox "所选文件夹搜索完毕,请查看记录文件。", vbInformation, "消息"
  
  Sub SearchTheName(objFolder)
   If arrOptions(Folder_Name) = 1 Then
  For Each objSubFolder In objFolder.SubFolders
   strName = objSubFolder.Name
   If FindInName(strName, strFindKeyWord) Then
  strFoundFile = strFoundFile & objSubFolder.Path & vbCrLf
   End If
  Next
   End If
   For Each objFile In objFolder.Files
   strName = objFile.Name
   If FindInName(strName, strFindKeyWord) Then
  strFoundFile = strFoundFile & objFile.Path & vbCrLf
   End If
   Next
   If arrOptions(Sub_Folder) <> 1 Then Exit Sub
   For Each objSubfolder In objFolder.SubFolders
  SearchTheName objSubfolder
   Next
  End Sub
  Function FindInName(strName, strFindWord)
   FindInName = InStr(1, strName, strFindWord, _
  arrOptions(Match_Case) Xor 1)
  End Function
  Function ErrorAndQuit(strErrMsg)
  Msgbox strErrMsg, vbCritical, "错误"
   Wscript.Quit
  End Function
  
  二、通透理解For Each...Next循环语句
  
  1.For Each...Next循环语句
  For Each...Next语句也是最常用的语句之一,用于对数组(array)或集合(collection)中的每个元素重复执行一组语句从而获得预期的计算结果。可以通俗地这样理解:假定一个筐中有未知的n个编号(索引号)的彩球,每次从筐中按编号顺序(起始号为0)拿出一个球,根据球的颜色要执行一系列不同的任务,或者对球执行一系列相同的任务,一直到球拿完为止。这里的球称作“元素”,用来枚举集合或数组中所有元素的变量,可能是Variant变量、通用Object变量或者指定的Automation对象变量。筐称作“组”,对象集合或数组的名称。
  
  2.For Each...Next语句的用法
  For Each 元素 In 组
  [语句]
  [Exit For]
  [语句]
  Next [元素]
  当“组”中至少有一个元素时,For Each...Next才会启动。当循环启动时,首先对“组”中的第一个元素执行循环中的所有语句,只要“组”中还有其他元素,就会对每个元素执行循环中的语句,一直到“组”中没有其他元素时结束循环。其中当遇到经常由If...Then语句判断结果为真值执行Exit For语句即退出循环。同样,For Each...Next循环语句可以多重嵌套循环,但是每个循环的“元素”必须是唯一的。
  
  3.下期预告:介绍Do...Loop和While...Wend语句和用法。
其他文献
手机系统快餐店(三)  手机注册表优化大师  掌柜的    把Windows玩得再转的人,在面对Windows Mobile的时候都有可能显得一筹莫展。输入法太慢?移动定制版的开机和关机音乐相当吵?还好,SmartPhone里的Windows也有注册表,优化一下吧!    提高输入法速度  主料:Windows Mobile 2003SE(SmartPhone)  ★代表机型:多普达 565/57
期刊
晓荷是一家企业集团公司的行政助理,负责的一项重要工作就是会议组织,从发送通知到日程安排,她井然有序的工作作风深得同行敬佩。一日,几位同行在“丽人风采”的联欢会间隙向她“取经”。只见她拿出包内的白色“笔记本”拍了拍:“我的工作全靠这个‘一秘’和里面的‘二秘’!尤其是Outlook 2003,会议组织可立了大功。”  “好经验要大家分享!”在大家的强烈要求下,晓荷将工作心得和盘托出:“通知会议并不是一
期刊
幽默是一种极高的智慧……  “我赚钱啦、赚钱啦,我都不知道怎么去花,我左手买个诺基亚右手买个摩托罗拉。我移动、联通、小灵通一天换一个电话号码呀,我坐完奔驰开宝马,没事洗桑拿吃龙虾……干嘛哪,干嘛哪,干嘛哪,别唱了,说你哪!病人家属在哪儿?病人该吃药啦……”  在这个追求个性的时代,彩铃没有理由不火。从2003年夏天开始,越来越多的手机中传来的不再是熟悉的“滴滴”声,而是动物的叫声、小孩的哭腔、搞笑
期刊
性感时尚的周迅随着手中MOTO的铃声音乐节奏摇摆着婀娜的身姿,会说话的大眼睛仿佛在告诉人们:“天啊,如此美妙的和弦让我如痴如醉!”。另一头,潘玮柏放出自己的手机音乐,街上的路人不由自主地与他一同漫舞起来……铃声,无处不在。
期刊
不必多言,《魔兽世界》的号召力绝对超过任何一款游戏,而且,它的普及不仅仅是游戏内容的贯穿性(你可以在《魔兽争霸》前三代中找到《魔兽世界》的历史),良好的游戏操作模式(Diablo的诸多元素都融入其中),更重要的是,游戏中极为绚丽的场景让任何一个人都难以忘怀。当然,《魔兽世界》对显卡的要求还是比较高的,不同级别的显卡可以获得不同的视觉效果。然而,这并不意味着只有显卡的性能足够强大,才能畅游《魔兽世界
期刊
面对自己的眼形你也曾手足无措?为什么即使按部就班上妆也化不出明星的眼妆?  盲目追逐时下最潮的眼妆画法,不如充分地了解自己的眼形,因为60%随意+40%时髦的平衡感正主宰着现在眼妆的潮流。两头尖细的橄榄形眼、前圆后细的彗星形圆眼和细长的眼形都是比较常见的眼形,完美眼部轮廓你必须先了解它们是怎么变美丽的。
期刊
上期说到,小丽新装了一台电脑,经过一番配置,用起来已经相当舒服、顺手了。不过在小丽去同学家玩的时候,发现了一件很奇怪的事情:同学小强跟她几乎是同时装的电脑,硬件配置、操作系统都差不多,装的软件也大同小异,但是小强的电脑似乎比她的要快很多,这是怎么回事呢?小强不无得意地说道:我教你做好系统优化七件事,保你的系统也能运行如飞。    1.要“面子”还是要速度  Windows XP安装后,默认的界面设
期刊
相信不少朋友看过中央台的《快乐驿站》节目,他们将一些小品、相声改编成Flash动画搬上了荧屏,在改编时还加入了很多搞笑元素,因此深受观众的喜爱。那么Flash动画是如何“走上”电视的呢?下面将给大家提供一个完整周详的方案,让你的Flash作品(或者从网上收集到的精彩Flash作品)变成VCD/DVD,从而也能在电视上“闪动”起来。    方案一:Flash→视频→VCD/DVD  Flash走上电
期刊
《电脑爱好者》2005年第24期上刊登了名为《KMPlayer让“暴风影音”黯然走开》的文章,通过七大绝招揭秘出KMPlayer的超强功能。今天我也把自己使用KMPlayer时的一些小“秘技”奉献出来,希望能对朋友们更好地欣赏影音节目有所帮助。    秘技1:查一查媒体的来龙去脉  现在的视音频格式很多,有时会搞得我们丈二和尚摸不着头脑。不过,在KMPlayer中不仅可以播放,而且按下Alt+J键
期刊
√ 刚买来的路由器该怎么设置?  √ 路由器IP、密码忘记怎么办?  √ 宽带路由器为什么使BT速度变慢了    现在,很多朋友的家里有了不止一台电脑。为了满足多位用户共享一个宽带连接的要求,SOHO宽带路由器在家庭和宿舍迅速普及。但是,相对Modem来说,宽带路由器的设置相对复杂。为了帮助大家用好、用足这个比较“专业”的设备,我们以流行的宽带路由器为例,介绍路由器从入门到精通的有关知识。    
期刊