2012-03-17 85 views
4

可能重複:
Batch file to delete files older than N daysMS DOS批處理刪除舊文件目錄

我試圖做一個DOS批處理文件要經過一個目錄,大約500,000文件進去,我希望它刪除所有大於1年的文件

這是我的代碼到目前爲止

@echo off 
title File Exclusion Act 
for /f "usebackq delims=|" %%f in (`dir /b "C:\Users\Travis\Desktop\LotsOfFiles"`) do echo %%f 
pause 

到目前爲止,它循環並打印出指定目錄中的所有文件。

任何提示/幫助非常感謝。

+1

請參閱此線程 http://stackoverflow.com/questions/51054/batch-file-to-delete-files-older-than-n-days – codechurn 2012-03-17 02:40:17

+2

@Art:我回顧了線程,所有線程在其中提到的所有級別,並找到一個(不是非常有效)基於DOS批處理的解決方案,不使用FORFILES ... – Aacini 2012-03-17 04:34:19

回答

3

下面的批處理文件必須使用舊文件從今天刪除的天數來調用。例如,使用365刪除1年前的文件。

@echo off 
setlocal EnableDelayedExpansion 
call :DateToJDN %date% oldDate= -%1 
for /F "skip=5 tokens=1-4*" %%a in ('dir /A:-D /O:D') do (
    call :DateToJDN %%a fileDate= 
    if !fileDate! lss %oldDate% (
     del "%%e" 
    ) else (
     goto :EOF 
    ) 
) 
goto :EOF 

:DateToJDN Date JDN= [+-days] 
for /F "tokens=1-3 delims=/" %%x in ("%1") do set /A mm=10%%x %% 100, dd=10%%y %% 100, yy=%%z 
if %mm% lss 3 set /A mm+=12, yy-=1 
set /A a=yy/100, b=a/4, c=2-a+b, e=36525*(yy+4716)/100, f=306*(mm+1)/10, %2=C+DD+E+F-1524%3 
exit /B 

如果您%DATE%格式不是MM/DD/YYYY,重新排序毫米,在第一線DD和YY變量:DateToJDN子程序。

+0

無法運行此操作。得到一個'丟失的操作數。該命令的語法不正確.'在'if!fileDate! lss%oldDate%' – 2013-02-05 07:31:11