2020年12月2日水曜日

フォルダ内の指定したファイル数だけ残して他を削除するバッチ

 日付で管理されたフォルダを定期的に消したいという事があり、Windowsだったのでバッチを組もうと思ったら、既に先人がやっていた、と言う話。

大体VBでみたいな感じで書いてあるのが多い中、標準コマンドだけで書いてあって、そりゃ層だなと思った次第。

 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12193313652

バッチは

cd /d "C:\target_folder"

for /f "skip=7" %%I in ('dir /b /o-n') do rd /s /q "%%I"

コマンド解説。

cdはchange directoryでフォルダ(ディレクトリ)の変更。/dはオプションで、ドライブの変更。

なので、これはc:target_folderに移動しますよということ。

for /f ★ in (■) do ▼は、★で指定したものを■の中から▼するというもの。

for /fの「/f」は、■をバラして▼に渡せ、というオプション。で、inの前には「skip=7」が指定されているので、「先頭から7つをスキップした%%I」という意味。

更にinには「dir /b /o-n」と書いてあり、

dirの意味は、ディレクトリ(ファイル名)出力。

/bはファイル名のみオプション。

/o-nはファイル名で並べ替え(/o)で、名前のアルファベット順(-oオプション)なので、

「ファイル名をアルファベット順で並べ替えたディレクトリ内ファイル名を出力」と言う意味。

do以降は、rd /s /q "%%I"で、rdはrmdirの略。変数Iを消せ、と言っている。オプションは/s(サブディレクトリも含めろ) /q(確認無し)。

あとはこれをテキストファイルに書いて、拡張子を.batにして、タスクスケジューラで読ませれば完成。


0 件のコメント:

コメントを投稿