2009-11-20 42 views
3

我正在写一个VBScript for SyncBack(备份工具),我正在删除旧版本的备份。如何删除文件夹时暂停VBS脚本?

'' # if current version is greater than the total allowed number of versions, 
    '' # delete the oldest folder 
    If versionNumber > totalVersions Then 
     delDirNum = versionNumber - totalVersions 
     If delDirNum > 0 Then 
      DelFoldername = containerFileOrFolder & "\" & delDirNum & "_" 
       '' " # Ignore this line SO Prettify doesn't do VB very well. 
      If fso.FolderExists(DelFoldername) = True Then 
       WScript.Echo "Deleting: <" & DelFoldername & ">" 
       Set oFolder = objFileSystem.GetFolder(DelFoldername) 
       oFolder.Delete() 
       WScript.Sleep 2000 
       If fso.FolderExists(DelFoldername) = False Then 
        WScript.Echo "Deleted <" & DelFoldername & "> successfully" 
       Else 
        WScript.Echo "Could not delete <" & DelFoldername & ">" 
       End If 
      End If 
     End If 
    End If 

但是,偶尔的文件夹(包含旧的备份),这我试图删除需要更长的时间是2秒WScript.Sleep 2000删除,我想知道是否有一种方式在打印出“删除<文件夹名称>成功”之前,使脚本等到文件夹被删除。

理想我很乐意这样的:

While oFolder.IsDeleting() Then 
    WScript.Echo "Still deleting..." 
    WScript.Sleep 2000 
Loop 

但我清楚地知道,这可能不会是这样。

+0

什么objFileSystem的类型? – 2009-11-20 13:02:19

+0

FileSystemObject:http://msdn.microsoft.com/en-us/library/z9ty6h50(VS.85).aspx – 2009-11-20 13:08:03

回答

1

使用计数器循环睡眠,note假定CScript主机使“静态删除”消息更具可调性。示例中的延迟时间为30秒。

Dim loopCount : loopCount = 0 
WScript.StdOut.Write "Deleting ." 
Do While fso.FolderExists(DelFoldername) And loopCount < 30 
    WScript.Sleep 1000 
    WScript.StdOut.Write "." 
    loopCount = loopCount + 1 
Loop 
WScript.StdOut.Write vbCrLf 
If fso.FolderExists(DelFolderName) Then 
    '' # Do stuff due to failure. 
End If 
+0

除了猜测删除文件夹并将其用作限制所需的最长时间之外,是否真的没有其他方式来做到这一点? – Jon 2009-11-20 15:20:37

+2

你担心无限期地等待,所以必须有一个限制。所以问题就变成了“如何确定什么是等待的最长时间,直到我可以确定文件夹删除肯定失败?”。这是一个不可能回答的问题,但我们可以使用一些常识并将其修改为“什么是最大__reasonable__时间量......”。我的建议,使用300秒,然后等待,看看有多少次没有覆盖它,我的钱在None上。 – AnthonyWJones 2009-11-20 15:47:47

+0

我的问题是无法在文件夹无法删除的情况下无限期地等待。 @ Tester101包含“On Error ...”是很有用的,因为它可以确保在删除文件夹及其内容时发生错误的情况下,等待不是无限的。除此之外,我可能必须按照您的建议设定限制。 – Jon 2009-11-20 16:10:44

3
While fso.FolderExists(DelFoldername) 
    WScript.Echo "Still deleting" 
    WScript.Sleep 1000 
Wend 
+0

这就是我要做的事情,但如果脚本无法删除文件夹呢?无限循环? – Jon 2009-11-20 13:36:06

+0

如果您有On Error Resume,则会自动中止错误。 – 2009-11-20 14:44:47

0

为什么不继续检查,看是否该文件夹仍然存在,并退出一旦它不见了?

“做 ”如果文件夹不存在,退出做 '循环