定期的なファイル整理のバッチファイル
先日、HARUNAさんの投稿「ファイル移動(複数/大量/数可変)で一部のファイルが残ってしまう」をヒントに、あるバッチファイルを作成しました。
D:\FDATAというフォルダ下に、毎営業日、西暦8桁のフォルダができて、その下にファイルが入っています。
行いたいことは、月が変わったら、D:\FDATAの下に前月のフォルダBK年月(例えば、2022/2/1ならD:\FDATA\BK202201)が作成され、前月フォルダは全てそこに移動したい。
また、半年前のBK年月フォルダ毎削除したい。
具体的に書くと
D:\FDATA\20220104
D:\FDATA\20220105
D:\FDATA\20220106
・・・
D:\FDATA\20220131
を
D:\FDATA\BK202201 の下に移動させ
半年前の
D:\FDATA\BK202108 を削除する
というバッチです。これを、タスクスケジューラでログイン時に実行するようセットしました。
タスクスケジューラ トリガー:ログイン時 コマンド:cmd オプション:/C D:\batch\ファイル整理.bat
バッチファイルがちょっと苦手な方の参考になればと投稿しました。
(HARUNAさんの投稿からは、ROBOCOPY /MOVE /E ""%i"" """ & dstFolder & "\%~nxi""" からROBOCOPYと%~nxiを参考にさせていただきました)
バッチファイル(D:\batch\ファイル整理.bat)
↓↓↓ここから↓↓↓
@echo off
set BASE=D:\FDATA
set yy=%date:~0,4%
set mm=%date:~5,2%
set /a zy=%yy%-1
rem ==============半年前の保存フォルダ削除==============
if %mm% lss 7 goto M0106
set dyy=%yy%
set /a dmm=%mm%-6
goto DELBK
:M0106
set dyy=%zy%
set /a dmm=%mm%+6
:DELBK
set dmm=0%dmm%
set dmm=%dmm:~-2%
if exist %BASE%\BK%dyy%%dmm% rd /s /q %BASE%\BK%dyy%%dmm%
rem ==============前月をBKへ移動==============
if %mm% equ 1 goto M01
set byy=%yy%
set /a bmm=%mm%-1
goto MOVEBK
:M01
set byy=%zy%
set bmm=12
:MOVEBK
set bmm=0%bmm%
set bmm=%bmm:~-2%
set byymm=%byy%%bmm%
set MBASE=%BASE%\BK%byymm%
if not exist %MBASE% mkdir %MBASE%
for /d %%f in (%BASE%\%byymm%*) do ROBOCOPY /MOVE /E %%f %MBASE%\%%~nf
↑↑↑ここまでです↑↑↑
最後の行のfor・・が難しくて、投稿を参考にするまで下記のように書いていました。
for /d %%f in (%BASE%\%byymm%*) do (
setlocal ENABLEDELAYEDEXPANSION
set moto=%%f
set saki=%MBASE%\!moto:~-8!
mkdir !saki!
xcopy /e %%f !saki!
rmdir /s /q %%f
)