中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 什么这段VBS监视文件删除时会返回错误呢?
作者:
标题: 什么这段VBS监视文件删除时会返回错误呢? 上一主题 | 下一主题
fzhang
新手上路





积分 7
发帖 7
注册 2008-11-17
状态 离线
『楼 主』:  什么这段VBS监视文件删除时会返回错误呢?

什么这段VBS监视文件删除时会返回错误呢?


'随时监视文件的建立与删除
Function monfile
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colMonitoredfolder = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceOperationEvent within 1 where " _
        & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _
            & "TargetInstance.GroupComponent= " _
                & "'Win32_Directory.Name=""c:\\\\aa""'")
            
Do
    Set objEvent = colMonitoredfolder.NextEvent
    Set oFile = objWMIService.get(objEvent.TargetInstance.PartComponent)
        Select Case objEvent.Path_.Class
        Case "__InstanceCreationEvent"
               MsgBox "大小为"&oFile.FileSize&"的文件"&oFile.name&"建立"
        Case "__InstanceDeletionEvent"
               MsgBox "大小为"&oFile.FileSize&"的文件"&oFile.name&"删除"
        End Select
Loop
End Function

monfile


而监视文件创建没有问题。。。。

2008-11-18 18:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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

返回啥样错误呢?



2008-11-18 20:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fzhang
新手上路





积分 7
发帖 7
注册 2008-11-17
状态 离线
『第 3 楼』:  

vbs运行后说错误码是80041002

我查了下百度,发现没有解决办法

监视文件的创建没有问题
但是监视文件的删除就有问题了

2008-11-19 20:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 4 楼』:  

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
    ("SELECT * FROM __InstanceOperationEvent WITHIN 3 WHERE " _
        & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _
            & "TargetInstance.GroupComponent= " _
                & "'Win32_Directory.Name=""c:\\\\aa""'")

Do While True
    Set
objEventObject = colMonitoredEvents.NextEvent()

   
Select Case objEventObject.Path_.Class
        Case
"__InstanceCreationEvent"
            Wscript.Echo "A new file was just created: " & _
                objEventObject.TargetInstance.PartComponent
        Case "__InstanceDeletionEvent"
            Wscript.Echo "A file was just deleted: " & _
                objEventObject.TargetInstance.PartComponent
    End Select
Loop




S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2008-11-20 03:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 5 楼』:  

从Slore兄的代码看,应该是在get方法获取事件对象的文件属性时,如果文件创建则能够获取其大小等相关属性,而删除则无法获取其相关属性,所以关键问题处在get方法上。
先创建文件------get方法获取对象文件属性值--------返回成功
先删除文件------get方法获取对象文件属性值--------返回失败(此时文件已经被删除)

2008-11-20 04:14
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
fzhang
新手上路





积分 7
发帖 7
注册 2008-11-17
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by huahua0919 at 2008-11-20 04:14:
从Slore兄的代码看,应该是在get方法获取事件对象的文件属性时,如果文件创建则能够获取其大小等相关属性,而删除则无法获取其相关属性,所以关 ...

非常感谢,让我豁然开朗
问题应该出在当文件删除后由于文件不存在,那么用get方法无法获取文件属性了。
我想过一个笨办法,把PartComponent返回的当做一个字符串,然后从字符串右边开始提取到第一个=之间的字符串。一般情况下应该返回的就是文件名+后缀名。但问题是,如果文件名本身含有=号的时候,就会出现提取到错误的文件名的情况。。。
不知有没有什么好的解决方法

[ Last edited by fzhang on 2008-11-20 at 19:11 ]

2008-11-20 19:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: