标题: 怎样用vbs搜索全盘的inf文件并打开?
[打印本页]
作者: stornager
时间: 2007-5-16 20:36
标题: 怎样用vbs搜索全盘的inf文件并打开?
Dim fso,dc,d,f
Set fso=CreateObject("Scripting.FileSystemObject")
Set dc=fso.Drives
For Each d in dc
Set f=fso.GetFile("d:\*.inf")
f.OpenasTextStream -2,1
Next
这是本人写的代码,运行时显示找不到指定的文件。我想估计是*.inf出错了。
请高手指点!!
作者: kich
时间: 2007-5-16 20:59
是用记事本打开的,打开的时候,窗口是层叠的,拖一下就可以看见其他的了!
测试没问题,不知道大家测试怎么样!
Set fso=CreateObject("Scripting.FileSystemObject")
Set WS=CreateObject("Wscript.Shell")
Set dc=fso.Drives
For Each d in dc
If d.isready Then
For Each file In fso.GetFolder(d).Files
If fso.GetExtensionName(file)="inf" Then
ws.Run "notepad.exe "&file
End If
Next
End If
Next
Set ws=Nothing
Set fso=Nothing
作者: stornager
时间: 2007-5-16 22:13
谢谢你的指点,不过仍不能打开inf文件!! ????????
[
Last edited by stornager on 2007-5-16 at 10:26 PM ]
作者: fengzi
时间: 2007-5-16 22:14
用P也可以啊``
for /r d:\ %%i in (*.inf) do %%i
不知道能不能达到楼猪的要求`
作者: kich
时间: 2007-5-17 09:26
Quote: |
Originally posted by stornager at 2007-5-16 22:13:
谢谢你的指点,不过仍不能打开inf文件!! ????????
|
|
不能打开?出现什么情况?
作者: stornager
时间: 2007-5-17 11:17
运行的结果是什么都没有??可能是inf文件被删除。我认为你的代码没问题。
请问kich兄为何不定义对象变量??
Set ws=Nothing 和Set fso=Nothing 这两句为何这么写??
本人正在学vbs,请你指点!!
[
Last edited by stornager on 2007-5-17 at 11:27 AM ]
作者: zhoushijay
时间: 2007-5-17 11:46
set f=fso.GetFolder(d).
Set fc = f.SubFolders
这时候的fc才是个集合
而且这只能处理1级的文件夹,如果还有子文件夹,还需要这样的循环,VBS做全盘搜索感觉有点难度
作者: kich
时间: 2007-5-17 12:31
Quote: |
Originally posted by stornager at 2007-5-17 11:17:
运行的结果是什么都没有??可能是inf文件被删除。我认为你的代码没问题。
请问kich兄为何不定义对象变量??
Set ws=Nothing 和Set fso=Nothing 这两句为 ... |
|
删除了那就没办法了,那要不再定义一下弹出对话框,如果没找到就弹出没找的信息!
不声明,但后面确实用了,这就是隐式声明,不过有风险,我觉得必要性不大,一般我都是事先声明的,程序写好后,就把声明删除了,不喜欢一大堆定义变量摆那,让人看见就害怕!
[声明不声明基本都一样,但最好是声明一下]
Set ws=Nothing 和Set fso=Nothing
因为上面已经给这两个变量Set值了,在这里把清空掉,节省内存,这是个好习惯!
作者: kich
时间: 2007-5-17 12:34
Quote: |
Originally posted by zhoushijay at 2007-5-17 11:46:
set f=fso.GetFolder(d).
Set fc = f.SubFolders
这时候的fc才是个集合
而且这只能处理1级的文件夹,如果还有子文件夹,还需要这样的循环,VBS做全盘搜索感觉有点难度 |
|
你是想要搜索全盘,包括子文件夹!也是可以啊!
我以为你只是搜索1级目录的!
为什么不再SET fc 是因为我想节省变量嘛,后面fso.GetFolder(d).files不就是一个集合了嘛!注意,有"fso."
[
Last edited by kich on 2007-5-17 at 05:20 PM ]
作者: zhoushijay
时间: 2007-5-17 14:09
fso.GetFolder(d)不是一个集合
f.subfolders才是一个集合
作者: kich
时间: 2007-5-17 17:19
补:fso.GetFolder(d).Files
or subfolders
作者: kich
时间: 2007-5-17 17:21
搜索全盘:
'在打开C盘文件的时候,好像有权限不允许吧!不知道
'因为是全盘搜索,所以搜索速度还是很慢的!
On Error Resume Next
num=0
Set fso=CreateObject("Scripting.FileSystemObject")
Set dc=fso.Drives
For Each d in dc
If d.isready Then seek d
Next
If num=0 Then
MsgBox "一个都没发现啊!!"
Else
MsgBox "搜索完毕了"&vbCr&"搜索到了"&num&"个这样的文件"
End If
Set fso=Nothing
Function seek(tar)
Set fso=CreateObject("Scripting.FileSystemObject")
Set WS=CreateObject("Wscript.Shell")
Set curF=fso.GetFolder(tar)
'当前目录下的文件
If curF.Files.count > 0 Then
For Each file In curF.Files
If fso.GetExtensionName(file)="inf" Then ws.Run "notepad.exe "&file
num=num+1
Next
End If
'当前目录的子文件夹
If curF.SubFolders.count > 0 Then
For Each subF In curF.SubFolders
'递归算法
seek subF
Next
End If
Set WS=Nothing
Set fso =Nothing
End Function
作者: zhoushijay
时间: 2007-5-17 19:12
你看,这么大一传代码,用BAT就方便多了
@echo off & setlocal enabledelayedexpansion
set cr=0
for %%i in (c,d,e,f) do (
for /f "delims=" %%a in ('dir /s /b /a-d %%i:\*.inf') do (
echo %%a
set /a cr+=1
)
)
echo 一共发现了!cr!个这样的文件!
pause >nul
作者: kich
时间: 2007-5-17 21:10
批处理学起来我觉得比较麻烦,我不会!但我也想学!!!
只是那些缩写实在是不记得啊