windosの指定日付より前のファイルを削除する

More than 3 years have passed since last update.

windowsの指定日付よりも前のファイルを削除したい場合の自分メモ

Linuxのfindのようなコマンドがwindowsにもあります。


コマンド

ディレクトリも削除したい場合は、初めにディレクトリから削除します。

ファイルの削除を実施してしまうと、フォルダの更新日時が書き変わり狙った動きをしません。

例)2016/03/10日以前のフォルダを削除する

forfiles /p "ファイルあるパス" /D -2016/03/10 /c "cmd /c IF @isdir==TRUE rmdir /S /Q @file"

例)2016/03/10日以前のファイルを削除する

forfiles /p "ファイルあるパス" /D -2016/03/10 /c "cmd /c del /F /S /Q @file"


Help

forfilesのヘルプを一応貼り付け

FORFILES [/P パス名] [/M 検索マスク] [/S]

[/C コマンド] [/D [+ | -] {yyyy/MM/dd | dd}]

説明:
ファイル (または、ファイルのセット) を選んで、そのファイル上の
コマンドを実行します。これはバッチ ジョブの使用に便利です。

パラメーター一覧:
/P パス名 検索を開始するパスを示します。
既定のフォルダーは現在実行中の
ディレクトリ (.) です。

/M 検索マスク 検索マスクによってファイルを検索します。
既定の検索マスクは '*' です。

/S サブディレクトリに対しても処理を行うように forfiles に
指示します (例: "DIR /S")。

/C コマンド 各ファイルの実行するコマンドを示します。
コマンドの文字列は二重引用符で囲んでくだ
さい。

既定のコマンドは "cmd /c echo @file" です。

次の変数をコマンドの文字列に使用することができ
ます:
@file - フィルの名前を返します。
@fname - 拡張子なしのファイル名を
返します。
@ext - ファイルの拡張子だけを返し
ます。
@path - ファイルの完全なパスを返します。
@relpath - ファイルの相対パスを返し
ます。
@isdir - ファイルの種類がディレクトリの場合
は "TRUE"を、ファイルの場合は
"FALSE" を返します。
@fsize - ファイルのサイズをバイトで返し
ます。
@fdate - ファイルの最終更新日を返し
ます。
@ftime - ファイルの最終更新時刻を返し
ます。

コマンド ラインに特殊文字を使用する場合は、
文字を 16 進数コードで 0xHH 形式で (例:
タブは 0x09) 指定してください。CMD.EXE の
内部コマンドの前には "cmd /c" が必要
です。

/D 日付 最終更新日が指定された日かもしくはそれ
以降 (+)、または指定された日またはそれ
以前 (-) であるファイルを "yyyy/MM/dd" 形式を使っ
て選択します。または、最終更新日が現在
の日にちより "dd" 日あと、もしくは "dd" 日
前であるファイルを選択します。有効な "dd"
値は 0 から 32768 の間です。
指定がない場合は、"+" が既定で使用さ
れます。
/? ヘルプまたは使用法を表示します。

例:
FORFILES /?
FORFILES
FORFILES /P C:\WINDOWS /S /M DNS*.*
FORFILES /S /M *.txt /C "cmd /c type @file | more"
FORFILES /P C:\ /S /M *.bat
FORFILES /D -30 /M *.exe
/C "cmd /c echo @path 0x09 was changed 30 days ago"
FORFILES /D 2001/01/01
/C "cmd /c echo @fname is new since Jan 1st 2001"
FORFILES /D +2016/3/23 /C "cmd /c echo @fname is new today"
FORFILES /M *.exe /D +1
FORFILES /S /M *.doc /C "cmd /c echo @fsize"
FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"