- ベストアンサー
DOSコマンドで指定日数よりも過去のフォルダを削除
サーバ上のログファイルを日毎に次のようなフォルダにまとめて管理しています。 (ログフォルダは翌朝のDOSバッチジョブでBACKUP_(処理日付)のフォルダを作成してその下に*.*指定で全てのファイル(除 フォルダ)を移動して作成します。) 例. BACKUP_20041130 BACKUP_20041129 BACKUP_20041128 ・ ・ ・ BACKUP_20040311 BACKUP_20040310 このフォルダを処理日付から数えて90日より古いものを削除するDOSコマンドバッチファイル(日次実行)を作成したいです。 プログラムを作成すればこれを実現するのは可能なんですが、なんとかDOSコマンドだけでこの仕組を作りこめないものでしょうか? ご存知の方がいらっしゃったら教えて下さい。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
毎日必ずフォルダが作られているなら最新の90個を除いたものを消せばいいので、 for /f "skip=90" %%A in ('dir /b /ad /o-n BACKUP_????????') do rd /s /q %%A ちゃんと日付けの計算をするなら、バッチコマンドだけでも不可能ではないですが長くなるので、日付け計算だけVBScriptを使うのが良いと思います。 echo WScript.Echo DateAdd("d",-90,Date) > tmp.vbs for /f "delims=/ tokens=1-3" %%A in ('cscript //nologo tmp.vbs') do set OLD=BACKUP_%%A%%B%%C del tmp.vbs for /d %%D in (BACKUP_????????) do if %%D LSS %OLD% rd /s /q %%D
その他の回答 (4)
- pita-gora
- ベストアンサー率70% (102/145)
kommyさんのサーバのOSの種類がわかりませんが、 2000以降なら参考URLに本日のn日前を求めるバッチが 掲載されています。参考にしてみては。
お礼
回答どうもありがとうございます。 今回はnotnotさんにご紹介いただいた、日付計算を行わずに最新のn個以外を削除する方法で対応することにしました。 今後、日付の判断が必要となる機会も出てくると思いますので、pita-goraさんにご紹介いただいたURLを参考にさせてい頂きます。 ありがとうございました!
kommyさんはファイル名に埋め込まれた日付を基準に判断したいと考えておられるので少し的外れかも知れませんが 下記URLに似たような質問があり、そのスレッドの500番の発言に 「フォルダの作成日」をもとに削除できる方法というのが 紹介されていますよ。
お礼
回答どうもありがとうございます。 今回はnotnotさんにご紹介いただいた、日付計算を行わずに最新のn個以外を削除する方法で対応することにしました。 今後、日付の判断が必要となる機会も出てくると思いますので、ffchopinさんにご紹介いただいたURLを参考にさせて頂きます。拝見しましたが、説明がわかりやすくていいですね。 ありがとうございました!
- popesyu
- ベストアンサー率36% (1782/4883)
DOSのコマンドだけでファイル名や作成・更新日時を取得・判別させるのは困難でしょう。別のexeなどを利用する必要があるかもしれません。 wshなどでしたら20行程度で済むものですからそちらで検討された方がお勧めかと。 参考 http://www.hatena.ne.jp/1086680518
お礼
回答どうもありがとうございます。 今回はnotnotさんにご紹介いただいた、日付計算を行わずに最新のn個以外を削除する方法で対応することにしました。 EXEを作成するとなると、仕様書やら設計書の変更、追加でテストも必要となりますのでそれ以外の方法を探していました。 すぐに反応いただいて心強かったです ありがとうございました!
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
DOSコマンドだけでは、日付の処理ができないと思うので VBScriptを使うというのは、だめなのでしょうか
お礼
回答どうもありがとうございます。 今回はnotnotさんにご紹介いただいた、日付計算を行わずに最新のn個以外を削除する方法で対応することにしました。 当方、VBScriptを利用した経験がありませんでしたので、それ以外の方法を探していました。今後の為にはスクリプトがわかったほうがよさそうなので、勉強してみたいです。 すぐに反応いただいて心強かったです ありがとうございました!
お礼
どうもありがとうございます! 「最新の90個を除いたものを削除」方式を利用させていただきます。 日付計算が不要で、簡単に実現できる方法を教えていただいて助かりました。