中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » VBS检测U盘的插入+查文件+提供操作选择
作者:
标题: VBS检测U盘的插入+查文件+提供操作选择 上一主题 | 下一主题
ffuck
新手上路





积分 15
发帖 6
注册 2007-5-27
状态 离线
『楼 主』:  VBS检测U盘的插入+查文件+提供操作选择

需要一段vbs,作用:
1.检测U盘的插入,提示
2.罗列U盘内存在的文件,包括隐藏的,并msgbox提示或其他方式提示
3.从一个txt文件里提取文件名,当U盘内存在txt所列文件时,
给出选择:删除.或者拷贝(txt内也可以 .abc 分类的文件类型,遇到那种类型给出选择)

常驻内存

上面那个vbs应该可以做到吧?

是否有高手支招?给个完整的?


重新修改了


[ Last edited by ffuck on 2007-6-15 at 03:21 PM ]

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




积分 272
发帖 99
注册 2006-6-2
状态 离线
『第 2 楼』:  

VBS恐怕是做不到如此完美的

首先是实时监控闪存盘这一点

你就要写一个循环来一直判断

尽管这样效率上还算说得过去

但是大部分循环是没有结果的

白白占用了系统的很多资源

或许你想到在循环内设置延时

但这样会造成你的监控不及时

并且同样会有许多循环被浪费



脚本语言做不到这一点

程序语言可以很容易做到

因为新加硬件时系统会通知WM_DEVICECHANGE消息

在自己的程序中响应这个消息就好了



X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
2007-6-16 09:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ffuck
新手上路





积分 15
发帖 6
注册 2007-5-27
状态 离线
『第 3 楼』:  

VBS恐怕是做不到如此完美的

首先是实时监控闪存盘这一点

你就要写一个循环来一直判断
------------------------------------------这个确实是的

但是大部分循环是没有结果的
白白占用了系统的很多资源
-----------------------------------------觉得应该不会占用很多


要是再有个格一段时间整理内存的..相信会好多?

当然vbs占用的内存对于现在1G以上的应该算不了什么。

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




积分 272
发帖 99
注册 2006-6-2
状态 离线
『第 4 楼』:  

我说的资源不是内存资源

而是CPU资源

由于一直处于循环的过程中

你的CPU越优秀

循环的次数越多而已

但是占用率却总是居高不下的

你希望有一个不断持续的非窗口循环在你系统的后台运行吗?



X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
2007-6-17 12:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ffuck
新手上路





积分 15
发帖 6
注册 2007-5-27
状态 离线
『第 5 楼』:  

了解...了解...

不过要是能写出来我觉得也应该不错...

有没有高手帮帮忙?暂不考虑系统占用什么的问题吧...

2007-6-17 14:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 6 楼』:  

利用WMI的异步操作,基本上不存在CPU占用率的问题。
至于其它的功能,用InternetExplorer.Application对象来实现应该比较完美,不过对于安装了某些第三方浏览器的系统来说,却可能得不到期望的结果。

2007-6-17 16:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 7 楼』:  

等待3742668斑竹的大作:)

2007-6-17 16:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ffuck
新手上路





积分 15
发帖 6
注册 2007-5-27
状态 离线
『第 8 楼』:  

斑竹真厉害,帮忙搞定吧...已经找了很久...

史无前例.
呵呵

2007-6-17 17:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 9 楼』:  

还是给个示例代码吧。不过这个方案并非优化后的方案:
Set oLocator = CreateObject("WbemScripting.SWbemLocator")
Set oSink = WScript.CreateObject("WbemScripting.SWbemSink","Event_")
Set oWMISvc = oLocator.ConnectServer
    oWMISvc.ExecNotificationQueryAsync oSink, _
                "Select * From __InstanceCreationEvent WITHIN 5 " & _
                "Where TargetInstance ISA 'Win32_LogicalDisk'"
Do
    WScript.Sleep 1000
Loop

Sub Event_OnObjectReady(oEventSource,oContext)

    Dim str,strFileList
    str = oEventSource.TargetInstance.Name
    For Each itemFile In oWMISvc.ExecQuery( _
            "Select * From CIM_DataFile Where Drive = '" & str & "'")
        strFileList = strFileList & itemFile.Name & vbCrLf
    Next
    WScript.Echo str & vbCrLf & strFileList

End Sub
只是简单地当等待增加盘符,事件实例被创建后则打印出新增加的盘符下所有的文件名。并没有对新增加盘符的类型做检测,另外也可能存在其他一些问题。
至于你要求的其他功能,在以往的脚本中都有讨论过,可以学习一下老贴。

另外,值得注意的是通过BAT也能基本完成你的要求。在XP专业版中提供了一个命令:eventtriggers,利用它可以响应事件日志中的可移动磁盘的插入事件。一个简单的例子:
eventtriggers /create /tr "宽带" /tk c:\ddd.bat /eid 20159
/create表示创建 事件触发器
/tr 指定事件触发器的名字
/tk 表示事件触发器运行的任务(你的其他功能可以写到这里指定的脚本里)
/eid 则指定事件源,在上面的例子中指定的时间源为 PPPOE拨号连接断开事件
执行上面的命令后,会在“任务计划”中多出一项任务,这个任务被启动后会执行C:\ddd.bat,当宽带连接被断开的时候会启动该任务。

写得乱七八糟的,希望能对你有点帮助吧。

2007-6-17 17:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
oraix
新手上路





积分 2
发帖 1
注册 2007-6-9
状态 离线
『第 10 楼』:  

可移动磁盘的插入事件好像是不会放到系统的eventlog的

2007-6-17 19:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tbx
新手上路





积分 11
发帖 6
注册 2007-10-14
状态 离线
『第 11 楼』:  

其实用 wmi可以做的更好的,

2008-1-20 19:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: