タイトルの通り、n日以前のフォルダを削除する方法ですが、巷では下記のバッチコードが良く紹介されており、そのコードを使っていたんですが、ある時からフォルダが削除されなくなってしまいました。
どうも、サブフォルダを先に消し始めると親フォルダの更新日が変わってしまうため、途中で作業が終了しているような挙動でした。

forfiles /p "ファイルあるパス" /D -30 /c "cmd /c IF @isdir==TRUE rmdir /S /Q @file"

なぜこんなことをしてるのかと言うと、クライアントの希望で安いNAS(BUFFALOのLS220DGシリーズ)を導入する事になったのですが、備わってる機能が最低限な為、このようにバッチファイルで対応しているわけです。

普通にNASを使う分には問題ないかと思いますが、CODEBASEではRAID1(ミラーリング)したNASをさらにバックアップすることを推奨しています。
ベストはクラウドに逃がしたり、別拠点があるならVPNを通してバックアップしたりですが、安価に済ませたい場合は、NASにUSBを接続して世代管理バックアップをする方法にしています。
※ただバックアップするだけではなく、世代管理することで何かあった際に非常に助かります。NASのゴミ箱機能でも良いですが、分かりやすく使いやすい外付けHDDの世代管理バックアップがおすすめです。

このNASのバックアップ機能を使うと上記画像のようになってしまいます。
普通のNASであれば指定した日以前のデータを削除してくれたりする機能があるのですが、このNASはそういった機能がありません。
末尾の0300は、午前3時にタスク設定している為、このようなフォルダ名になってしまいます。

※フォルダの最終更新日を利用せずに、このNASで作成されるフォルダ名の日付比較対象にして、サブフォルダの中身を見ることなく、対象のフォルダを削除するバッチを作成してみたいと思います。

完成コード

@echo off
setlocal enabledelayedexpansion

echo WScript.Echo DateAdd("d",-30,Date()) > tmp.vbs
for /f "tokens=1-3 delims=/-" %%A in ('cscript //nologo tmp.vbs') do set ymd=%%A%%B%%C
del tmp.vbs

set bkdir=w:test\

@echo バックアップファイルの整理をしています。しばらくお待ちください。

for /D %%A in (%bkdir%*) do (
	set fymd=%%~nA
	set gymd=!fymd:~0,8!
	if !gymd! leq %ymd% (
		rmdir /s /q %bkdir%%%~nA
	)
)
exit

説明

echo WScript.Echo DateAdd("d",-30,Date()) > tmp.vbs
for /f "tokens=1-3 delims=/-" %%A in ('cscript //nologo tmp.vbs') do set ymd=%%A%%B%%C
del tmp.vbs

VBScriptを使用して指定日以前の日付を取得しています。
tmp.vbsを単体で実行すると下記のようにダイアログが表示されます。
上記ではVBSを作成して、指定日を取得後にVBSを削除していますが、作成していたVBSを呼び出すだけにしても問題ありません。

set bkdir=w:test\ 

削除対象のフォルダを指定

for /D %%A in (%bkdir%*) do (
    set fymd=%%~nA
    set gymd=!fymd:~0,8!
    if !gymd! leq %ymd% (
        rmdir /s /q %bkdir%%%~nA
    )
)

削除対象のフォルダの中のフォルダ名一覧を取得し、0300部分を除去した年月日と指定日を比較して、古ければ削除を実行しています。
※0300を含めると、比較できない桁数となってしまうので注意

備考

このコードはサブフォルダの中の日付フォルダの日付を比較対象にしています。最終更新日で比較しているものではないのでご注意ください。