• ベストアンサー

DOSコマンドで指定日数よりも過去のフォルダを削除

サーバ上のログファイルを日毎に次のようなフォルダにまとめて管理しています。 (ログフォルダは翌朝のDOSバッチジョブでBACKUP_(処理日付)のフォルダを作成してその下に*.*指定で全てのファイル(除 フォルダ)を移動して作成します。) 例. BACKUP_20041130 BACKUP_20041129 BACKUP_20041128    ・    ・    ・ BACKUP_20040311 BACKUP_20040310 このフォルダを処理日付から数えて90日より古いものを削除するDOSコマンドバッチファイル(日次実行)を作成したいです。 プログラムを作成すればこれを実現するのは可能なんですが、なんとかDOSコマンドだけでこの仕組を作りこめないものでしょうか? ご存知の方がいらっしゃったら教えて下さい。

  • kommy
  • お礼率93% (14/15)

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.4

毎日必ずフォルダが作られているなら最新の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

kommy
質問者

お礼

どうもありがとうございます! 「最新の90個を除いたものを削除」方式を利用させていただきます。 日付計算が不要で、簡単に実現できる方法を教えていただいて助かりました。

その他の回答 (4)

  • pita-gora
  • ベストアンサー率70% (102/145)
回答No.5

kommyさんのサーバのOSの種類がわかりませんが、 2000以降なら参考URLに本日のn日前を求めるバッチが 掲載されています。参考にしてみては。

参考URL:
http://homepage1.nifty.com/jak/batch/jdate.html
kommy
質問者

お礼

回答どうもありがとうございます。 今回はnotnotさんにご紹介いただいた、日付計算を行わずに最新のn個以外を削除する方法で対応することにしました。 今後、日付の判断が必要となる機会も出てくると思いますので、pita-goraさんにご紹介いただいたURLを参考にさせてい頂きます。 ありがとうございました!

noname#141400
noname#141400
回答No.3

kommyさんはファイル名に埋め込まれた日付を基準に判断したいと考えておられるので少し的外れかも知れませんが 下記URLに似たような質問があり、そのスレッドの500番の発言に 「フォルダの作成日」をもとに削除できる方法というのが 紹介されていますよ。

参考URL:
http://forum.nifty.com/fpcu/top/doslog02/0496.htm
kommy
質問者

お礼

回答どうもありがとうございます。 今回はnotnotさんにご紹介いただいた、日付計算を行わずに最新のn個以外を削除する方法で対応することにしました。 今後、日付の判断が必要となる機会も出てくると思いますので、ffchopinさんにご紹介いただいたURLを参考にさせて頂きます。拝見しましたが、説明がわかりやすくていいですね。 ありがとうございました!

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.2

DOSのコマンドだけでファイル名や作成・更新日時を取得・判別させるのは困難でしょう。別のexeなどを利用する必要があるかもしれません。 wshなどでしたら20行程度で済むものですからそちらで検討された方がお勧めかと。 参考 http://www.hatena.ne.jp/1086680518

kommy
質問者

お礼

回答どうもありがとうございます。 今回はnotnotさんにご紹介いただいた、日付計算を行わずに最新のn個以外を削除する方法で対応することにしました。 EXEを作成するとなると、仕様書やら設計書の変更、追加でテストも必要となりますのでそれ以外の方法を探していました。 すぐに反応いただいて心強かったです ありがとうございました!

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

DOSコマンドだけでは、日付の処理ができないと思うので VBScriptを使うというのは、だめなのでしょうか

kommy
質問者

お礼

回答どうもありがとうございます。 今回はnotnotさんにご紹介いただいた、日付計算を行わずに最新のn個以外を削除する方法で対応することにしました。 当方、VBScriptを利用した経験がありませんでしたので、それ以外の方法を探していました。今後の為にはスクリプトがわかったほうがよさそうなので、勉強してみたいです。 すぐに反応いただいて心強かったです ありがとうございました!

関連するQ&A

  • DOSコマンドで過去日付のついたファイル名のテキストデータを削除

    DOSコマンド初心者です。 自動的に、とあるフォルダーに日付+ABC.TXTデータが作成されるのですが、増えるいっぽうで削除は手動でしてます。 自動で何日前分を削除する方法を教えてください。 DOSバッチとタスクスケジュールで出来ないものか考えています。

  • DOSコマンド(バッチファイル)の記述方法について

    Webサイトで、掲示板のログを定期的にFTPダウンロードして管理する運用を考えています。 DOSのFTPコマンドでダウンロードして、タスクで定時実行する所まで、できたのですが、いつも決まった場所にダウンロードするため、データが毎回上書きされてしまいます。 それで、FTPダウンロードの直前に、DOSコマンド(バッチファイル)で別フォルダを作ってデータを退避させるようにしたいのです。 もしできれば『2006_02_20_16_00』など、バッチファイル実行時の日時(年月日、時刻まで)が分かるようなフォルダ名にしたいです。 そんな事できるのでしょうか? DOSコマンドに詳しくないので、分かる方教えてください。 ダウンロードするフォルダは、『c:\Backup\』だとして、書き方の例を教えてください。 よろしくお願いします。

  • DOSコマンドでの日付選択ファイル削除

    DOSのファイル削除コマンド(DELあるいはERASE)にファイル更新日付による選択オプションを与えるようなことはできないのでしょうか。 一定期間以上前のLogファイルや一時保存ファイル等を定期的に自動削除していくタスクスケジュールを組みたいのです。具体的には、特定フォルダ内の、例えば1ヶ月以上前に更新されたファイルのみ指定して削除するDOSコマンドオプションがあれば、これを使ったバッチプログラムファイルを作り、それをタスクスケジューラで定期的に実行する形式にしたいと考えています。 もしDOSコマンドによる方法が不可能な場合、他に簡単でいい方法があったらご教示いただければ助かります。

  • DOSコマンドの削除で・・・

    DOSコマンドを使って、指定ファイルの削除バッチを作成し、タスク管理で自動実行しようと試みたのですが、DOS窓でy/nの返答を返さないと先に進まず自動的に実行が出来ません。 いい方法があれば教えてください。

  • DOSコマンドについて

    ご教授お願いします。 Windows Server 2003において、 DOSコマンドによるバッチを作成するにあたり ファイルを圧縮する設定/方法を教えて頂けないでしょうか? 恐れ入りますが、宜しくお願いします。

  • DOSコマンドでアドバイスをお願いします

    よろしくお願いします。 Windows2003サーバのDOSコマンドで サーバのメンテナンス機能の開発を検討しています。 下記のロジックについて、お手数ですが、 サンプルなど頂けると助かります。 サーバ上に散在するログファイルを、 そのサーバ上の一か所のディレクトリに 集めたい、というのが要望です。 test.lstというリストファイルがあり、 そこにはサーバ上のログファイルなどが記載されています。 C:\temp\test.log C:\program files\data\data.log C:\data\execute.log ・・・ これらのファイル名をループで読み込みながら、コピーし、 「C:\Backup」にそのコピーを集めていきたいと思います。 DOSコマンドによるバッチでこれは実現可能でしょうか?。 よろしくお願いします。

  • DOSコマンドとか。。。

    コンパイルログが表示されている Dos画面のログをテキスト出力する方法は どうすればよいでしょうか。 コンパイルコマンド + > ファイル名 以外の方法でよろしくお願いします。 Windows2000を使用しています。 共有コンピュータの共有フォルダにアクセスする バッチファイルを作成しようと考えています。 共有フォルダにはユーザー名とパスワードを入力する 必要があり、毎回入力するのがめんどくさいからです。 どのように記述すればよいでしょうか? 以上 よろしくお願いします。

  • DOSでフォルダごと移動するには

    WindowsNT 4.0を使用しておりまして、 夜間に起動するバッチファイルを作成しております。 1つのフォルダの中に、数個のフォルダに分かれておりまして、1つが数GBあります。 人が使用していない時間帯に、移動をかけたいのですが、 --------------------------------------------- move C:\DIR1 C:\TEMP (DIR1をC:\TEMPフォルダに移動したい) --------------------------------------------- MOVEコマンドで、フォルダの移動を試みたのですが エラーになり、正常に処理してくれません。 自分のクライアント(WindowsXP)では、 問題なく、移動できたのですが NTのDOSコマンドでは、ダメなのでしょうか?? ちなみに、フォルダ以下にあるファイルに対して MOVEコマンドを実行すると、正常に移動できました。 フォルダごと、サブフォルダも含めて 移動したい場合は、どのように記述すれば よろしいのでしょうか?お知恵をお貸しください。

  • DOSコマンドについて

    教えてください。 DOSコマンドでコピーするバッチファイルを作っています。 主な目的はモバイルと自宅PCとのファイルのやりとりです。 copy C:\"Documents and Settings\(略)\*.*" d:\bp\mail みたいな感じでコピーしています。 フォルダ内にファイルがたくさんあると、時間が掛かってしまいます。更新されているものだけを上書きするようにはできないものでしょうか。

  • DOSコマンドについて

    DOSコマンドで下記の2つを実現したくて色々と 調べてみたのですがわかりませんでした。 (1)バッチファイルを実行したら、DOSプロンプトの  画面が立ち上がり、検索したい文字を入力できる  状態にする。 (2) (1)で入力された文字列が2文字以上だった場合は  エラーメッセージを表示し、再度入力させる。 (3)(1)で入力した文字列を任意のファイル内で検索し、  あれば大文字⇒小文字に変換する。 echoとpromptというコマンドを使って入力画面を 表示させることができるのかと思いましたが なかなかうまくいかない状態でした。 何か参考になるサイトがあれば教えて頂ければ幸いです。

専門家に質問してみよう