- 指定した日付のフォルダを削除する
batファイルでは、Excelのように日付で四則計算をすることができません
日付の仕様を理解して、プログラムを作成する必要があります
しかし、リスクが高いのでやりたくありませんよね?
そこで、《PowerShell》のコマンドを使用します
《PowerShell》 ってなに?
コマンドプロンプトに置き換わるものみたいですね
正直、良くわかりませんが、 《PowerShell》 のコマンドを使用すれば、日付で四則計算と同じようなことができます
毎日バックアップのためにフォルダをコピーしていたら、いつの間にやらディスクの容量がいっぱいになってるってことありませんか?
現在の日付から10日以上前のデータを削除するコマンドを入れておけば、常に最新のバックアップファイルを維持している状態になりますね
《コマンドプロンプト》と 《PowerShell》 の両方のコマンドを使用して、batファイルを作成します
FOR /F “usebackq” %%a IN (powershell [DateTime]::Today.AddDays"("-4")".ToString"("'yyyyMMdd'")"
) DO SET ad4=%%a
batファイルにこのコードをそのままパクりましょう
ad4が変数になります。-4が本日の日付から4日前という意味になります。
《-4》を《4》に変更すると、本日の日付から4日後が表示されます
このプログラムコードを覚えておけば、日付の取得方法が簡単になります
rmdir C:\BK\% ad4 % /s /q
上のコードを解説しますね
rmdir → フォルダを削除するコード
C:\BK\% ad4 % → 削除するフォルダの階層
/s → ファイルやサブディレクトリも含めて削除する
/q → 削除する際に確認メッセージを表示しない
FOR /F “usebackq” %%a IN (powershell [DateTime]::Today.AddDays"("-1")".ToString"("'yyyyMMdd'")"
) DO SET ad1=%%a
rmdir C:\BK\% ad1 % /s /q
本日の日付が2021年7月26日なら上のコードでは、2021年7月25日が取得されています。
実際には、【20210725】が取得されます
C:\BK\20210725のフォルダ(中に入っているデータごと)を削除します
- FOR /F “usebackq” %%a IN (
powershell [DateTime]::Today.AddDays"("0")".ToString"("'yyyyMMdd'")"
) DO SET ad0=%%a - FOR /F “usebackq” %%a IN (
powershell [DateTime]::Today.AddDays"("-5")".ToString"("'yyyyMMdd'")"
) DO SET ad5=%%a - mkdir C:\BK\% ad0 %\192.168.11.2
- XCOPY “C:\BK\テストっす” “C:\BK\% ad0 %\192.168.11.2” /d /e /h /r /y
- rmdir C:\BK\% ad5 % /s /q
解説です 本日は2021年7月26日とする
①本日の日付を《ad0》に格納している
②5日前の日付を 《ad5》に格納している
③ C:\BK\20210726\192.168.11.2フォルダを作成している
④指定したフォルダを③のフォルダへコピーしている
⑤本日より5日前のフォルダを削除している
このbatファイルを毎日クリックしていると、5日目以降は一番古いフォルダが自動で削除されていることになります。タイムスケジューラと組み合わせると、ファイルサーバーとしても使用できそうですね