window2 vbs script pendrive eliminar downloader definicion computadora como vbscript

vbscript - pendrive - ¿Cómo pausar el script VBS mientras se elimina la carpeta?



window2 vbs (4)

Estoy escribiendo un VBScript para SyncBack (utilidad de copia de seguridad) en el que estoy eliminando versiones anteriores de una copia de seguridad.

'''' # 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

Sin embargo, ocasionalmente la carpeta (que contiene la copia de seguridad anterior) que estoy intentando eliminar tarda más de 2 segundos en eliminar WScript.Sleep 2000 y me preguntaba si había alguna manera de hacer que el script espere hasta que la carpeta haya sido borrado antes de que se imprima "Deleted <foldername> successfully".

Idealmente, me encantaría algo como:

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

Pero soy consciente de que probablemente ese no sea el caso.


Dormir en bucle con contador, la nota asume que el host de CScript hace que el mensaje "Aún borrar" sea un poco más variable. La demora en el ejemplo es de 30 segundos.

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


Puede mover la eliminación a su propia función y agregar un tiempo de espera. por lo tanto, si la carpeta no se elimina en un período de tiempo razonable, la función regresará sin borrar la carpeta. Algo como esto:

Function DeleteFolder(Folder, Timeout) ''Folder is the full file path of the folder ''Timeout is the amount of time to wait for the folder to be deleted (in seconds). On Error Resume Next Set fso = CreateObject("Scripting.FileSystemObject") If fso.FolderExists(Folder) Then fso.DeleteFolder Folder, True start = Now() do while fso.FolderExists(Folder) AND DateDiff("s",start,Now()) < Timeout wscript.sleep 1000 Loop End If If fso.FolderExists(Folder) Then DeleteFolder = False Else DeleteFolder = True End If End Function

Luego llama a la función de esta manera

If DeleteFolder("C:/New Folder", 5) Then Wscript.Echo "Folder Deleted" Else Wscript.Echo "Folder could NOT be deleted" End If

ADVERTENCIA: no se recomienda el uso de On Resume Resume Next .
Este comando hará que se ignoren todos los errores y solo se debe usar bajo la supervisión de un adulto.

Los efectos secundarios pueden incluir: Errores extraños en otras partes de un guión, acción inesperada del guión, dolor de cabeza, mareos, confusión, enojo o un impulso repentino de maldecir. En casos raros, se sabe que este comando causa sangrado en los ojos y los oídos. El uso de este comando puede provocar pérdida de cabello y trabajo.


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


¿Por qué no seguir comprobando si la carpeta aún existe y salir una vez que se ha ido?

''Hacer'' Si la carpeta no existe, salga de Do ''Loop