2009-11-20 78 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

爲什麼不繼續檢查,看是否該文件夾仍然存在,並退出一旦它不見了?

「做 」如果文件夾不存在,退出做 '循環