LoginSignup
29
34

More than 1 year has passed since last update.

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

Last updated at Posted at 2016-03-23

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日以前のファイルを削除する
※ 2021/10/14 @fileだとファイル名だけなので@pathが良さげです m(_ )m
※ delコマンドの/Sオプションは不要でした m(
_)m
forfiles /p "ファイルあるパス" /D -2016/03/10 /c "cmd /c del /F /Q @path"

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"
29
34
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
34