2011-05-18 57 views
0

我想寫一個DOS批處理文件來刪除目錄中的舊文件夾,但保留最新的文件夾。這裏是我的文件夾D:\myfolders\下一個樣本:批處理文件刪除目錄中的舊文件夾和不同文件夾

Jack_20110507 (previous day time-stamped folder) 
Jack_20110508 (current day time-stamped folder) 
James_20110507 
James_20110508 
Kenny_20110507 
Kenny_20110508 
... 

我想刪除所有前一天時間戳的文件夾*_20110507,但保留所有的當前日期時間標記的文件夾*_20110508新的時間戳文件夾每天創建

+0

您可以獲取當前日期爲'/ F 「跳過= 1個delims =」 %% X IN( 'WMIC OS獲得localdatetime')做,如果沒有定義指明MyDate設置指明MyDate = %% x'和你那麼需要一點數學數學。它得到多一點的時間,雖然。 – Joey 2011-05-19 14:47:35

回答

0

我不會爲最簡單的東西以外的其他任何東西使用批處理腳本。

我建議你看一下像Python這樣的腳本語言。

1

下面的腳本將在YYYYMMDD中獲取當前的本地日期(禮貌this answer)。

它然後通過在一個給定的目錄中的所有文件夾循環(在我的情況,這是包含腳本的文件夾下面的測試子文件夾),並檢查文件名的最後8個字符。如果它們不符合今天的日期,則會刪除該文件夾。

/Q禁用的確認文件夾刪除。如果你想被提示確認刪除文件夾之前,刪除此。

@ECHO off & setlocal EnableDelayedExpansion 

REM Get the local datetime 
FOR /F "usebackq tokens=1,2 delims==" %%i IN (`wmic os get LocalDateTime /VALUE 2^>NUL`) DO IF '.%%i.'=='.LocalDateTime.' SET ldt=%%j 

REM Set the datetime to YYYYMMDD format. 
SET today=%ldt:~0,4%%ldt:~4,2%%ldt:~6,2% 

REM For every file in the folder test: 
FOR /D %%f IN (.\test\*) DO (
    REM Store the folder name temproarily 
    SET folder=%%f 
    REM Get just the ending date part of the folder name 
    SET folderpart=!folder:~-8! 
    REM If it doesn't match todays date, delete the folder. 
    IF NOT !folderpart!==!today! RD /Q %%f 
) 
@ECHO ON 
相關問題