中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎样用vbs搜索全盘的inf文件并打开?
作者:
标题: 怎样用vbs搜索全盘的inf文件并打开? 上一主题 | 下一主题
stornager
中级用户

scriptlover


积分 328
发帖 131
注册 2007-3-25
状态 离线
『楼 主』:  怎样用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出错了。
请高手指点!!



scriptlover
Be with script forever!!
2007-5-16 20:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kich
中级用户





积分 397
发帖 168
注册 2006-10-8
状态 离线
『第 2 楼』:  

是用记事本打开的,打开的时候,窗口是层叠的,拖一下就可以看见其他的了!
测试没问题,不知道大家测试怎么样!
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


2007-5-16 20:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
stornager
中级用户

scriptlover


积分 328
发帖 131
注册 2007-3-25
状态 离线
『第 3 楼』:  

谢谢你的指点,不过仍不能打开inf文件!! ????????

[ Last edited by stornager on 2007-5-16 at 10:26 PM ]



scriptlover
Be with script forever!!
2007-5-16 22:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fengzi
中级用户

金牌会员


积分 315
发帖 152
注册 2007-1-25
状态 离线
『第 4 楼』:  

用P也可以啊``
for /r d:\ %%i in (*.inf) do %%i
不知道能不能达到楼猪的要求`

2007-5-16 22:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kich
中级用户





积分 397
发帖 168
注册 2006-10-8
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by stornager at 2007-5-16 22:13:
谢谢你的指点,不过仍不能打开inf文件!! ????????

不能打开?出现什么情况?

2007-5-17 09:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
stornager
中级用户

scriptlover


积分 328
发帖 131
注册 2007-3-25
状态 离线
『第 6 楼』:  

运行的结果是什么都没有??可能是inf文件被删除。我认为你的代码没问题。
请问kich兄为何不定义对象变量??
Set ws=Nothing 和Set fso=Nothing 这两句为何这么写??
本人正在学vbs,请你指点!!

[ Last edited by stornager on 2007-5-17 at 11:27 AM ]



scriptlover
Be with script forever!!
2007-5-17 11:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 7 楼』:  

set f=fso.GetFolder(d).
Set fc = f.SubFolders
这时候的fc才是个集合
而且这只能处理1级的文件夹,如果还有子文件夹,还需要这样的循环,VBS做全盘搜索感觉有点难度



你好,脚本专家!
<a target=blank href=tencent://message/?uin=29654761&Site=www.111.com&Menu=yes><img border="0" SRC=http://wpa.qq.com/pa?p=1:29654761:5 alt="点击这里给我发消息"></a>
2007-5-17 11:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kich
中级用户





积分 397
发帖 168
注册 2006-10-8
状态 离线
『第 8 楼』:  



  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值了,在这里把清空掉,节省内存,这是个好习惯!

2007-5-17 12:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kich
中级用户





积分 397
发帖 168
注册 2006-10-8
状态 离线
『第 9 楼』:  



  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 ]

2007-5-17 12:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 10 楼』:  

fso.GetFolder(d)不是一个集合
f.subfolders才是一个集合



你好,脚本专家!
<a target=blank href=tencent://message/?uin=29654761&Site=www.111.com&Menu=yes><img border="0" SRC=http://wpa.qq.com/pa?p=1:29654761:5 alt="点击这里给我发消息"></a>
2007-5-17 14:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kich
中级用户





积分 397
发帖 168
注册 2006-10-8
状态 离线
『第 11 楼』:  

补:fso.GetFolder(d).Files
or subfolders

2007-5-17 17:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kich
中级用户





积分 397
发帖 168
注册 2006-10-8
状态 离线
『第 12 楼』:  

搜索全盘:
'在打开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


   此帖被 +4 点积分        点击查看详情   
评分人:【 stornager 分数: +4  时间:2007-5-17 17:28


2007-5-17 17:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 13 楼』:  

你看,这么大一传代码,用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



你好,脚本专家!
<a target=blank href=tencent://message/?uin=29654761&Site=www.111.com&Menu=yes><img border="0" SRC=http://wpa.qq.com/pa?p=1:29654761:5 alt="点击这里给我发消息"></a>
2007-5-17 19:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kich
中级用户





积分 397
发帖 168
注册 2006-10-8
状态 离线
『第 14 楼』:  

批处理学起来我觉得比较麻烦,我不会!但我也想学!!!
只是那些缩写实在是不记得啊

2007-5-17 21:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: