2012-03-17 82 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