1. ホーム
  2. スクリプト・コラム
  3. DOS/BAT

Batはforfilesを使って期限切れのファイルを自動的に一括削除する

2022-02-11 09:42:35

バックアップファイルを保存するためのFTPサーバーだけでなく、毎日データを保持する必要はありませんので、順序でハードディスクの空き容量を節約することを検討するために、いくつかの古いファイルを削除する必要がある、限り、最後の週または月を保存することができます。
Windowsにはforfilesという一括削除プログラムが付属していますが、XPでは使えないようです、ブログ記事の下の方にある添付ファイルからダウンロードできます
まず、私のアプリケーションについてです。毎日ftpサーバー側でデータファイルをバックアップした後、過去2週間分のファイルだけを保存したいのです。
以下の内容でbatファイルを作成します。
書く

@echo off
rem write to log
set filename=deletefile.log
echo -------------------Delete Expired Log Files------------------------- >>%filename%
echo Start >>%filename%
echo (%date% %time%) >>%filename%
echo Delete the expired log files in target directory path 1, Please wait... >>%filename%
forfiles.exe /p "D:\Kugou" /m *.tar /d -14 /c "cmd /c del @path"
echo End >>%filename%
echo (%date% %time%) >>%filename%

肝心のコマンドですが、forfiles.exe /p "D:\Kugou" /m *.tar /d -14 /c "cmd /c del @path" となります。
このコマンドは、D:/Kugou ディレクトリで拡張子が tar のファイルを検索し、その日付属性が 14 日前(-14 は前、+14 は後)であるかどうかをチェックし、削除コマンドを実行することを意味します。
そして、タスクのスケジュールが追加されます。
forfilesパラメータの使い方に関する記事はこちらです。
ファイル
フォルダまたはツリーから一括処理するファイルを選択します。
シンタックス
forfiles [/p パス ] [/m サーチマスク ] [/s ] [/c コマンド ] [/d [{+ | - }] [{MM / DD / YYYY | DD }] ]。
パラメータ
/パス
どこから検索を開始するかを示す、Path を指定します。デフォルトのフォルダは現在の作業ディレクトリで、ピリオド (.) を入力することで指定されます。
/m サーチマスク
SearchMaskでファイルを検索します。デフォルトのSearchMaskは*. * .
/s
forfiles にサブディレクトリ内を検索するように指示します。
/c コマンド
各ファイルに対して、指定されたコマンドを実行します。スペースを含むコマンド文字列は、引用符で囲む必要があります。デフォルトのコマンドは、"cmd /c echo @file" です。
/d [{+ | - }] [{MM / DD / YYYY | DD }]。
MM / DD / YYYY は指定された日付、DD は現在の日付から DD 日を引いた日数です。または-が指定されない場合は、+が使用される。DDの有効範囲は、0〜32768です。
/?
コマンドプロンプトにヘルプを表示する。
コメント
- Forfilesは、バッチファイルの中で最も一般的に使用されています。
- Forfiles /s は、dir /s と似ています。
- 次の表は、/c コマンドのコマンド文字列で使用できる変数の一覧です。
変数の説明
ファイル
 ファイル名
名前
 拡張子なしのファイル名
次のページ
 ファイル拡張子
パス
 ファイルへのフルパス
リルパス
 ファイルへの相対パス
を指定します。
 ファイルタイプがディレクトリの場合はTRUE、それ以外の場合はFALSEとして計算されます。
サイズ
 ファイルのサイズ(バイト単位
fdate
 ファイル内の最終更新日の日付スタンプ
アットタイム
 ファイル内の最終更新のタイムスタンプ
- forfiles を使用すると、複数のファイルに対してコマンドを実行したり、複数のファイルに引数を渡したりすることができます。たとえば、ツリー内の *.txt という拡張子を持つすべてのファイルに対して TYPE コマンドを実行することができます。また、C:/ドライブにある各バッチ ファイル (*.bat) を、最初の引数としてファイル名 "Myinput.txt" で実行することができます。
- forfilesを使用することで、以下のいずれかのアクションを実行することができます。
- 絶対日付または相対日付でファイルを選択するには、/d を使用します。
- fsize (ファイルサイズ) や @fdate (ファイル日付) などの変数を使用して、ファイルのアーカイブツリーを構築します。
- ファイルとディレクトリを区別するために@isdir変数を使用します。
- コマンドラインに特殊文字を含め、16進数コード0x HHで文字を折り返して出力をフォーマットします。
- Forfiles は、単一のファイルのみを扱うように設計されたツールで "circular subdirectory" フラグを実行することで動作します。

ドライブ C: にあるすべてのバッチファイルを一覧表示するには、次のように入力します。
forfiles /p c:/ /s /m*.bat /c"cmd /c echo @file is a batch file"
ドライブC:上のすべてのディレクトリを一覧表示するには、次のように入力します。
forfiles /p c:/ /s /m*. * /c"cmd /c if @isdir==true echo @file is a directory"
ドライブC:にある、100日以上存在するすべてのファイルを一覧表示するには、次のように入力します。
forfiles /p c:/ /s /m*. * /dt-100 /c"cmd /c echo @file :date >= 100 days"
ドライブ C: にある 1993 年 1 月 1 日より前に作成されたすべてのファイルを一覧表示し、1993 年 1 月 1 日より前の日付のファイルに対して "ファイルはかなり古いです!" と表示するには、次のように入力します。
forfiles /p c:/ /s /m*. * /dt-01011993 /c"cmd /c echo @file is quite old!"
ドライブC:にあるすべてのファイルの拡張子を列形式で一覧表示するには、次のように入力します。
forfiles /p c:/ /s /m*. * /c "cmd /c echo @file の拡張子は 0x09@ext0x09" とします。
ドライブC:にあるすべてのバッチファイルを一覧表示するには、次のように入力します。
forfiles /p c:/ /s /m *.bat /c "cmd /c echo @file is a batch file".Forfiles /p c:/ /s /m *.bat /c echo @file is a batch file"
ドライブC:上のすべてのディレクトリを一覧表示するには、次のように入力します。
forfiles /p c:/ /s /m *. * /c "cmd /c if @isdir==true echo @file is a directory"
ドライブC:にある、100日以上存在するすべてのファイルを一覧表示するには、次のように入力します。
forfiles /p c:/ /s /m *. * /d t-100 /c "cmd /c echo @file :date >= 100 days"
ドライブ C: にある 1993 年 1 月 1 日より前に作成されたすべてのファイルを一覧表示し、1993 年 1 月 1 日より前の日付のファイルに対して "ファイルはかなり古いです!" と表示するには、次のように入力します。
forfiles /p c:/ /s /m *. * /d t-01011993 /c "cmd /c echo @file is quite old!"
ドライブC:にあるすべてのファイルの拡張子を列形式で一覧表示するには、次のように入力します。
forfiles /p c:/ /s /m*. * /c "cmd /c echo @file の拡張子は 0x09@ext0x09" です。

forFiles.exeのバッチコマンド(32/x64)ダウンロード。 https://www.jb51.net/softs/498793.html