あなたが唯一の指定された制限よりも古いファイルを削除した場合、マッチ内のすべてのファイルを以前の状態ならば、フォルダにのみ、最初に一致したファイルを削除し、その後、彼らは空になっている場合のみ、フォルダを削除、削除する必要があります。
Option Explicit
Dim strPath
strPath = "d:\shared\temp"
Call removeOldFiles(strPath, DateAdd("h", -24, Now()), False)
Sub removeOldFiles(ByVal currentFolder, timeLimit, deleteFolder)
' Retrieve a reference to currentFolder if it is not a FSO.Folder
If TypeName(currentFolder) <> "Folder" Then
With WScript.CreateObject("Scripting.FileSystemObject")
If .FolderExists(currentFolder) Then
Set currentFolder = .GetFolder(currentFolder)
Else
Exit Sub
End If
End With
End If
' Remove files older than timeLimit
Dim oFile
For Each oFile In currentFolder.Files
If oFile.DateCreated < timeLimit Then
Call oFile.Delete(True)
End If
Next
' Recursive call to clean each subfolder
Dim oSubFolder
For Each oSubFolder In currentFolder.Subfolders
Call removeOldFiles(oSubFolder, timeLimit, True)
Next
' If the folder is old enough and it is empty, remove it
If currentFolder.DateCreated < timeLimit _
And currentFolder.Files.Count = 0 _
And currentFolder.SubFolders.Count = 0 _
And deleteFolder _
Then
Call currentFolder.Delete(True)
End If
End Sub
あなたは、あなたが最初にeveryting
Option Explicit
Dim strPath
strPath = "d:\shared\temp"
Call removeOldFolder(strPath, DateAdd("h", -24, Now()))
Sub removeOldFolder(ByVal currentFolder, timeLimit)
If recurseCheckOldData(currentFolder, timeLimit) Then
Call currentFolder.Delete(True)
End If
End Sub
Private Function recurseCheckOldData(ByRef currentFolder, timeLimit)
' Until everything is checked, the data is considered newer than timeLimit
recurseCheckOldData = False
' Retrieve a reference to currentFolder if it is not a FSO.Folder
If TypeName(currentFolder) <> "Folder" Then
With WScript.CreateObject("Scripting.FileSystemObject")
If .FolderExists(currentFolder) Then
Set currentFolder = .GetFolder(currentFolder)
Else
Exit Function
End If
End With
End If
' Check current folder time
If currentFolder.DateCreated > timeLimit Then
Exit Function
End If
' Check current folder files
Dim oFile
For Each oFile In currentFolder.Files
If oFile.DateCreated > timeLimit Then
Exit Function
End If
Next
' Recursive call to check each subfolder
Dim oSubFolder
For Each oSubFolder In currentFolder.Subfolders
If Not recurseCheckOldData(oSubFolder, timeLimit) Then
Exit Function
End If
Next
' Up to now everything is older than the indicated time
recurseCheckOldData = True
End Function
はい!ありがとうございました!あなたが書いた最初のスクリプトは、私が必要とするものです!しかし、唯一の問題は、フォルダやファイルがない場合にスクリプトが "temp"を削除することです。これは実行したくありません。 "temp"ディレクトリは常にそこにとどまり、削除されることはありません。それを修正する方法はありますか? –
@ E.Karlssonの場合、フォルダを削除する必要があるかどうかを示すために、 'removeOldFiles'サブに追加の引数(ex。' deleteFolder')を含めます。サブフォルダを呼び出すときは 'False'を、サブフォルダのループからは再帰呼び出しで' True'を渡します。最後の条件を変更して、 'And deleteFolder'を含めます。内側の呼び出しはサブフォルダを削除しますが、最初の呼び出しはそれを保持します。 –
申し訳ありませんが、これは初めてのことですが、コードに入れたい場所を分かりません。どこで最後の状態を見つけることができますか? –