0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windowsバッチで一定期間の更新していないフォルダ、ファイルを削除する

Posted at

1. はじめに

  • Windowsのバッチファイルで不要なフォルダ、ファイルを削除したい
  • 一定期間更新していないフォルダ、ファイルを対象にしたい

2. 開発環境

  • Windows 11

3. forfilesコマンド

3.1. ファイル削除

  • 指定したフォルダ内で、更新日付が14日以上経過したファイルを削除する(サブディレクトリ内を含む)
    forfiles /P "C:\hogehoge" /S /M *.* /C "cmd /c if @isdir==FALSE del @path" /D -14

3.2. フォルダ削除

  • 指定したフォルダ内で、更新日付が14日以上経過したフォルダを削除する(サブディレクトリ内を含む)
    forfiles /P "C:\hogehoge" /S /C "cmd /c if @isdir==TRUE rmdir /q @path" 2>&1 /D -14

3.3. ヘルプ

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 +2025/5/15 /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"

4. サンプルプログラム

@echo off

rem 対象パス名
set PATH=C:\hogehoge

rem 日付
set DAYS=-14

rem フォルダ内フォルダ、ファイル削除
forfiles /P "%PATH%" /S /M *.* /C "cmd /c if @isdir==FALSE del @path" /D %DAYS%
forfiles /P "%PATH%" /S /C "cmd /c if @isdir==TRUE rmdir /q @path" 2>&1 /D %DAYS%

rem 処理終了
exit

5. 参考文献

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?