更新日時が古い特定の拡張子のファイルのみを移動させるバッチファイル

ソフトウェア

ファイルサーバーやNASなどで容量を食いやすいファイルを
ほかのストレージに逃がすなどの用途にいかがでしょうか。
robocopyを使っているのでアクセス権やディレクトリ構造は維持されます。

水色部分を適宜編集し使用する。

必ず試験環境を用意し、念入りに段階的な動作試験を行うこと。
(例:2フォルダ4ファイル→10フォルダ100ファイル→50フォルダ1000ファイル、など)


rem 【特定の拡張子のファイルのみをフォルダ構造をそのまま移動するコマンド】
rem ※厳密にはコピー&コピー元の削除という処理を行う※

rem ◆移動させるファイルの拡張子を指定
set targetext=jpg

rem ◆移動対象とするファイルのルールを指定
set deldate=180
rem ↑最終更新日がバッチファイルの実行時よりもx日以上前のもの

rem ◆移動元フォルダを指定
set indir="E:\test1"

rem ◆移動先フォルダを指定
set outdir="E:\test2"

rem ◆ログ保存時のフォルダを指定
set log_folder="E:\logs"

rem ◆ログ保存時のファイル名を指定する。※拡張子は含めない※
set file1=%date:~0,4%-%date:~5,2%-%date:~8,2%_clean_%targetext%_phase1(copy)
set file2=%date:~0,4%-%date:~5,2%-%date:~8,2%_clean_%targetext%_phase2(delete)
rem ↑ファイル名の先頭に現在の年月日を設定
rem ↑コピー&削除という処理のため、「コピーしたファイル一覧の出力」と「削除したファイル一覧の出力」をそれぞれ指定

rem ◆ログファイルの拡張子を指定する。
set ext1=".log"
set ext2=".zip"
rem ↑一次処理では「.log」という拡張子で出力、二次処理で「.zip」に圧縮

rem ◆コピー処理
robocopy %indir% %outdir% *.%targetext% /s /MINAGE:%deldate% /R:0 /LOG:%log_folder%\%file1%%ext1%

rem ◆削除処理
forfiles /P "%indir%" /S /M *.%targetext% /C "cmd /c echo @path" /D -%deldate% >> "%log_folder%\%file2%%ext1%"
forfiles /P "%indir%" /S /M *.%targetext% /C "cmd /c del @path" /D -%deldate%


ログファイルを圧縮したい場合はバッチ処理する端末に7-zipをインストールし、
以下のコマンドをバッチファイルに追記します。

rem ◆ログファイルを圧縮し、元データ(*.log)を削除
"C:\Program Files\7-Zip\7z.exe" a "%log_folder%\%file1%%ext2%" "%log_folder%\%file1%%ext1%"
del "%log_folder%\%file1%%ext1%"
"C:\Program Files\7-Zip\7z.exe" a "%log_folder%\%file2%%ext2%" "%log_folder%\%file2%%ext1%"
del "%log_folder%\%file2%%ext1%"


バッチファイルの開始から終了までに時間がかかると、
移動されずに削除されるファイルが出てくる可能性があります。
あまり大規模な環境でのご利用は推奨していません。

This website stores cookies on your computer. These cookies are used to provide a more personalized experience and to track your whereabouts around our website in compliance with the European General Data Protection Regulation. If you decide to to opt-out of any future tracking, a cookie will be setup in your browser to remember this choice for one year.

Accept or Deny

タイトルとURLをコピーしました