0

我制作了一个 VBscript 来移动 Windows 文件夹,当脚本到达用户打开的文件夹时,它会卡住。有没有办法可以更改我的脚本,使其跳过打开的文件夹并跳过打开的文件?


Dim fso, directory, item, group, dateStamp, NumberFilesDeleted, text, MoveFoldersErrorInfo, MoveFilesErrorInfo, objLogFile

On error resume Next 

Set fso = CreateObject("Scripting.FileSystemObject")

'Move folders in the temp folder to To_Be_Deleted folder and check for errors
fso.MoveFolder "E:\Projects\temp\*" , "E:\Projects\To_Be_Deleted"
If Err.Number <> 0 Then
   MoveFoldersErrorInfo =  "Error: " & Err.Number & " Error (Hex): " & Hex(Err.Number) & Err.Source & " Description: "  & Err.Description
   Err.Clear
End If

'Move files in the temp folder to To_Be_Deleted folder and check for errors
fso.MoveFile "E:\Projects\temp\*" , "E:\Projects\To_Be_Deleted"
If Err.Number <> 0 Then
    MoveFilesErrorInfo =  "Error: " & Err.Number & " Error (Hex): " & Hex(Err.Number)  & Err.Source & " Description: "  & Err.Description
    Err.Clear
End If
4

2 回答 2

0

Vbscript 的文件操作非常慢,如果有可靠的方法来检查文件是否打开,它甚至会进一步减慢进程。您可以像在脚本示例中那样使用“on error resume next”来忽略打开的文件。

我只知道您想要检查的一个原因,那就是使用 systernals 中的 psfile.exe 之类的实用程序强制关闭文件,但我想您的用户不会对此感到满意。

作为外部程序 psfile 可以从您的脚本运行并检查并在需要时关闭打开的文件,因此您可以首先使用 /c 参数(强制关闭)在已处理的文件夹上运行它,然后从批处理脚本中移动。

于 2013-04-29T17:58:10.850 回答
0

VBScript 在文件的移动/删除操作中不是很可靠。改用 DOS 命令,它甚至会删除/移动用户打开的文件。

您必须自己创建文件夹,这是一个减号。但它可以保证工作并且不会给你错误信息。

您的代码可能与此类似:

Set wshShell = CreateObject( "WScript.Shell" )
wshShell.Run "cmd /c mkdir " & strNewDestination & "\" & strFolder, 0, True 
wshShell.Run "cmd /c copy /y " & strFolder & "\*.* " & strNewDestination & "\" & strFolder, 0, True
wshShell.Run "cmd /c del /y " & strFolder & "\*.*", 0, True
于 2013-04-29T17:38:32.497 回答