2014-12-04 53 views
0

我需要幫助調整下面的代碼或新的代碼,甚至定期清理特定的目錄。我嘗試了一些網上找到的解決方案,但他們似乎都沒有正確的工作。基本上我需要一個命令來根據修改的日期去除比X天更早的文件/文件夾。我發現的腳本似乎刪除了太多。大多數似乎首先刪除文件,然後刪除任何空目錄。這似乎並不適用於我。有沒有辦法查看一個文件夾的修改日期,如果它的舊版本,刪除文件夾和內容?計劃是通過任務調度程序每週執行一次。BAT或VBS清除舊文件和文件夾

我會看看我能解釋我的數據:

我的數據:

Mainfolder

Subfolder1

SubSubFolder1.1 - 包含舊的文件夾舊文件

SubSubFolder1.2 - 包含舊文件的舊文件夾

SubSubFolder1.3 - 含新建文件夾的新文件

Subfolder2

SubSubFolder2.1 - 包含舊的文件夾舊文件

Subfolder3

SubSubFolder3.1 - 包含新文件

新建文件夾

腳本的結果應該如下所示,只剩下以下文件夾\文件:

Mainfolder

Subfolder1

SubSubFolder1.3 - 含新建文件夾的新文件

Subfolder2 - 刪除的

Subfolder3

SubSubFolder3.1 - 含新建文件夾的新文件

以下是我在網上找到的代碼,並且一直在嘗試修改但尚未使其正常工作。我試圖調整它,但沒有運氣得到我想要實現的結果。它不斷刪除太多的數據,或者如果通過註釋掉某些行來進行調整,它不會消除足夠的數據。

Const strPath = "C:\Temp" 
Dim objFSO 
Set objFSO = CreateObject("Scripting.FileSystemObject") 

Call Search (strPath) 

' Comment out below line if you'd like to use this script in windows schedule task 
WScript.Echo"Done." 

Sub Search(str) 
Dim objFolder, objSubFolder, objFile 
Set objFolder = objFSO.GetFolder(str) 
For Each objFile In objFolder.Files 

    ' Use DateLastModified for modified date of a file 
    If objFile.DateCreated < (Now() - 5) Then 
     objFile.Delete(True) 
    End If 

Next 
For Each objSubFolder In objFolder.SubFolders 
    Search(objSubFolder.Path) 

    ' Files have been deleted, now see if the folder is empty. 
    If (objSubFolder.Files.Count = 0) Then 
     objSubFolder.Delete True 
    End If 

Next 
End Sub 

回答

0

爲什麼不只是使用FORFILES命令?

REM This will print the files which have not been modified in the last 90 days. 
FORFILES /P "C:\Dir\To\Clean" /S /D -90 /C "CMD /C ECHO @path" 

REM This will _delete_ the files which have not been modified in the last 90 days. 
FORFILES /P "C:\Dir\To\Clean" /S /D -90 /C "CMD /C DEL /F @path" 
+0

我已嘗試之一,但我還需要刪除這些文件均在目錄,但我並不需要做大量看空目錄,並刪除它們全部如果是空的。 – 2014-12-04 17:45:27

+0

由於它出現一個目錄是全部或全部沒有,爲什麼不清除結果中包含的返回的目錄(默認包括過時的文件):'FORFILES/P「C:\ Dir \ To \ Clean」/ S/D -90/C「CMD/C IF @ IsDir == TRUE RMDIR/S/Q @Path」' – 2014-12-04 17:56:17

0

讓我們來看看,如果我理解正確你的問題:你想刪除第一級子文件夾及其所有內容只有當它們不包含於X天更新的任何文件。那是對的嗎?如果是這樣,你可以做這樣的事情:

mainfolder = "C:\main\folder" 
maxAge  = 5 'days 

Set fso = CreateObject("Scripting.FileSystemObject") 

Function HasNewFiles(fldr) 
    HasNewFiles = False 

    For Each f In fldr.Files 
    If DateDiff("d", f.DateLastModified, Now) < maxAge Then 
     HasNewFiles = True 
     Exit Function 
    End If 
    Next 

    For Each sf In fldr.SubFolders 
    HasNewFiles = HasNewFiles(sf) 
    If HasNewFiles Then Exit Function 
    Next 
End Function 

For Each subfldr In fso.GetFolder(mainfolder).SubFolders 
    If Not HasNewFiles(subfldr) Then subfldr.Delete True 
Next 
+0

此腳本沒有出現任何操作。我將主文件夾位置更改爲我的臨時文件夾。我認爲它的運行,但沒有被刪除。不幸的是,我不知道如何排除故障。我今天早上繼續看着它。 – 2014-12-08 14:57:04

+0

@PY_我把'DateDiff'語句中的兩個日期顛倒過來了。請再試一次。 – 2014-12-08 16:59:21

+0

錯誤行23字符31.需要的對象:'sf' – 2014-12-08 17:58:33

相關問題