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?

More than 1 year has passed since last update.

バッチでファイル削除

Last updated at Posted at 2023-10-17

ファイル、サブフォルダ削除

コマンド

@echo off
set targetFolder=C:\batwork\data\
set num=-7

rem 指定したフォルダとそのサブフォルダ内のすべてのファイルに対して、更新日付が7日以前のものを削除
forfiles /p "%targetFolder%" /s /m * /d %num% /c "cmd /c if @isdir=FALSE del @path"

rem サブフォルダを削除
forfiles /p "%targetFolder%" /s /d %num% /c "cmd /c if @isdir==TRUE rmdir /s /q @path" 2>&1

set ret=%errorlevel%
echo %ret%

exit /b %ret%

プリフィックス

forfiles コマンドで使用される @ プリフィックスは、コマンド内で特定の変数やプロパティにアクセスするためのプレースホルダとして機能します。

  1. @file: 現在処理中のファイルの名前です。
  2. @fname: ファイルの名前部分(拡張子を含まない)です。
  3. @ext: ファイルの拡張子です。
  4. @path: ファイルのフルパスです。
  5. @relpath: ファイルの相対パスです。
  6. @isdir: 対象がディレクトリ(フォルダ)である場合に TRUE、それ以外の場合に FALSE です。
  7. @fsize: ファイルサイズです。
  8. @fdate: ファイルの最終更新日です。
  9. @ftime: ファイルの最終更新時刻です。

これらの変数やプロパティは、forfiles コマンド内で使用して、ファイルやディレクトリの情報にアクセスします。例えば、更新日付が一定期間よりも古いファイルを削除するスクリプトなどでよく使われます。

オプション

/p "%targetFolder%": 操作を行う対象のフォルダを指定します。
/s: サブディレクトリ内も含めて処理します。
/m *: すべてのファイルを対象にします。
/d -7: 更新日付が7日以前のものを選択します。
/c "cmd /c if @isdir==FALSE del @path": 選択された各ファイルに対して実行するコマンドを指定します。

ネットワークパスの回避について

forfiles コマンドは、UNCパス(ネットワーク上のファイルパス)をサポートしていない??
回避策としてpushd コマンドを使用してディレクトリに移動すると、ネットワークパスがローカルドライブの一時的な割り当てに変更されます。最後に、popd コマンドを使用して元のディレクトリに戻ります。

@echo off
set "uncPath=\\server\share\path"

pushd "%uncPath%"
forfiles /s /d -7 /c "cmd /c echo @path"
popd
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?