2012-03-17 16 views
4

可能性の重複を古いファイルを削除します。私はそれに50万のファイルとディレクトリを通過するDOSバッチファイルを作成しようとしている
Batch file to delete files older than N daysMS DOSのバッチは、ディレクトリに

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

+2

@Artを参照してください。私は、そのスレッドを見直し、すべてのスレッドすべてのレベルでそれに言及し、ちょうどFORFILESを使用しない1つ(非常に効率的ではない)のDOSバッチベースのソリューションを見つけました。 – Aacini

答えて

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 

あなたの%の日付%の形式はMM/DD/YYYYでない場合は、ミリメートルを並べ替え、の最初の行でDDとYY変数:DateToJDNサブルーチン。

+0

これを実行することができません。 '不在オペランドを取得します。コマンドの構文は間違っています。 'at' if!fileDate! lss%oldDate% ' –