forfiles

ファイルまたはファイルのセットに対してコマンドを選択して実行します。 このコマンドは、バッチ ファイルで最もよく使用されます。

構文

forfiles [/P pathname] [/M searchmask] [/S] [/C command] [/D [+ | -] [{<date> | <days>}]]

パラメーター

パラメーター 説明
/P <pathname> 検索を開始するパスを指定します。 既定では、検索は、現在の作業ディレクトリから開始されます。
/M <searchmask> 指定された検索マスクに従ってファイルを検索します。 既定の検索マスクは * です。
/S forfiles コマンドに対して、サブディレクトリを再帰的に検索するように指示します。
/C <command> 各ファイルに対して指定されたコマンドを実行します。 コマンド文字列は二重引用符で囲む必要があります。 既定のコマンドは "cmd /c echo @file" です。
/D [{+\|-}][{<date> | <days>}] 最終変更日が指定された期間内のファイルを選択します:
  • 最終変更日が指定された日付以降 (+) または以前 (-) であるファイルを選択します。ここで、date は MM/DD/YYYY の形式です。
  • 最終更新日が現在の日付に指定された日数を加算した日付以降 (+) または現在の日付から指定された日数を引いた日付以前 (-) のファイルを選択します。
  • days の有効な値には、0 から 32 の範囲内の数値と 768 が含まれます。 符号が指定されなかった場合は、既定で + が使用されます。
/? コマンド ウィンドウにヘルプ テキストを表示します。

解説

  • forfiles /S コマンドは dir /S に似ています。

  • /C コマンドライン オプションで指定されているように、コマンド文字列で次の変数を使用できます。

    変数 説明
    @FILE ファイル名。
    @FNAME 拡張子なしのファイル名。
    @EXT ファイル名の拡張子。
    @PATH ファイルの完全なパス。
    @RELPATH ファイルの相対パス。
    @ISDIR ファイルの種類がディレクトリの場合は、TRUE に評価されます。 それ以外の場合は、FALSE に評価されます。
    @FSIZE バイト単位のファイル サイズ。
    @FDATE ファイル上の最終変更日のスタンプ。
    @FTIME ファイル上の最終変更時刻のスタンプ。
  • forfiles コマンドを使用すると、複数のファイルに対してコマンドを実行したり、複数のファイルに引数を渡したりすることができます。 たとえば、.txt ファイル名拡張子を持つツリー内のすべてのファイルに対して type コマンドを実行できます。 または、ドライブ C 上で最初の引数をファイル名の Myinput.txt としてすべてのバッチ ファイル (*.bat) を実行することもできます。

  • このコマンドは次の操作が可能です。

    • /d パラメーターを使用して、ファイルを絶対日付または相対日付で選択します。

    • @FSIZE や @FDATE などの変数を使用して、ファイルのアーカイブ ツリーを構築します。

    • @ISDIR 変数を使用して、ファイルをディレクトリと区別します。

    • 0xHH 形式の文字の 16 進コード (タブの 0x09 など) を使用して、コマンドラインに特殊文字を含めます。

  • このコマンドは、1 つのファイルのみを処理するように設計されたツール上で recurse subdirectories フラグを実装することによって機能します。

ドライブ 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"

現在のディレクトリ内の 1 年以上前のすべてのファイルを一覧表示するには、次のように入力します。

forfiles /S /M *.* /D -365 /C "cmd /c echo @file is at least one year old."

現在のディレクトリ内の 2007 年 1 月 1 日より前の各ファイルに対して「file is outdated」というテキストを表示するには、次のように入力します。

forfiles /S /M *.* /D -01/01/2007 /C "cmd /c echo @file is outdated."

現在のディレクトリ内のすべてのファイルのファイル名拡張子を列形式で一覧表示し、拡張子の前にタブを追加するには、次のように入力します。

forfiles /S /M *.* /C "cmd /c echo The extension of @file is 0x09@ext"