• ベストアンサー

データ削除についてご教授下さい

こんばんは。 フォルダ単位で削除する方法を考えています。 状況:特定のディレクトリに日付(例:20050901)のフォルダが存在し、 翌月2日(タスクスケジューラにて実行)に前月データフォルダ(例フォルダ名に200509**) を削除する方法を考えています。 ※できるだけ処理内容は簡単にしたい ※特定ディレクトリに前月のデータフォルダリストの作成は可能(200509.txt) 上記の条件でバッチを作成したいと思っているのですが、 Windows2003Serverで動作させられるでしょうか? ご教授ください、宜しくお願いします。

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

  • ベストアンサー
回答No.2

 Perl を使った回答は No.1 に出ましたので、別の案をば。 案1:あくまで Windows のバッチを使う  「特定ディレクトリに前月のデータフォルダリストの作成は可能」とうことならば、 cd 削除したいフォルダのあるフォルダ for /f %%i in (パス\200509.txt) do @rmdir /s /q %%i 2> nul でできます。  余談になりますが、実行時の日付から自動的に前月のデータフォルダのリストを得る方法は無いかと考えたのですが、当月のフォルダなら for /f "delims=/ tokens=1,2" %%i in ("%date%") do @dir /b %%i%%j* で得られるのですが、どうしても月を示す%%jを「前月」に戻す方法が見つけられませんでした。 案2:例えば cygwin を導入して UNIX のコマンドを使う cd 削除したいフォルダのあるフォルダ rm -rf `date '+%Y %m' | awk '{ printf "%04d%02d*", $1, --$2 }'` で OK です。UNIX のシェルとコマンドは強力なので、いろいろ使えます。この際導入を検討されてはいかがでしょうか…。

参考URL:
http://www.cygwin.com/
natural_mix
質問者

お礼

回答ありがとうございます。 今回は案2を参考にしgawk.exeを配置処理させることにし、また他の処理にも活用できました。 大変参考になりました。またご教授ください。

その他の回答 (1)

  • catby
  • ベストアンサー率65% (50/76)
回答No.1

PerlScriptではダメでしょうか? ActivePerlをインストールして、以下のPerlScriptを動作させれば、お望みの事が出来ると思います。 このスクリプトは・・・ カレントディレクト以下の、ファイル&フォルダ名に「.」が含まれていないものを対象とし、 今日より20日前の月より古いフォルダを消去します。 ・2005/10/02に実行すると、20050932より数字の小さいフォルダを消去します ・2005/10/22に実行すると、20051032より数字の小さいフォルダを消去します PLをタスクで実行したい場合、 perl.exe <スクリプト名> としないとダメだった気がします。 また、タスク設定の[開始]の項目がカレントディレクトリとなるはずです。 ---------- rmdir.pl (ここから) ---------------------------------------- $elapsed_time = 20; use Cwd; # カレントディレクトリ取得 $cd = Cwd::getcwd(); # $elapsed_time 日前の日付を取得 $time = time; $time -= ($elapsed_time * 60 * 60 * 24); local($day,$mon,$year,$wday) = (localtime($time))[3..6]; $date = sprintf("%04d%02d32", $year+1900, $mon+1); # カレントディレクトリフォルダ内を検索 opendir(DIR, $cd) || die "open error\"$cd\""; $i = 0; while($target = readdir(DIR)) { # . の無い名前のみ対照 if(not $target =~ /\./) { # 日付比較 if($date >= $target) { $del_dir[$i++] = $target; } } } closedir(DIR); # フォルダ削除 for($i = 0 ; $i < @del_dir ; $i++) { print "remove folder $del_dir[$i]\n"; system("rmdir /S /Q $del_dir[$i] >NUL"); } ---------- rmdir.pl (ここまで) ---------------------------------------- ActivePerlは、以下のURLよりダウンロード出来ます。 http://www.activestate.com/Products/ActivePerl/

参考URL:
http://www.activestate.com/Products/ActivePerl/
natural_mix
質問者

お礼

回答ありがとうございます。 ActivePerlの導入も考えたのですが、SWのインストールが 許されない状況でしたので、今回はUNIXのコマンドを利用することにしました。 ありがとうございました。またご教授下さい!

関連するQ&A

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

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

  • バッチを走らせてそのバッチを削除したい

    ある特定の日にバッチでサービスをスタートアップを自動から手動に切り替えたいと思います。 バッチを作ってWindowsタスクスケジューラで特定の日にバッチを読み取り手動にしようと 考えています。やりたい事は、そのバッチが走った後に自動で削除したいと思います。 1回切りプログラムを走らせて、そのプログラムを即破棄というようにやりたいのですが、 方法がわかりません。何か良いアイディアはないでしょうか?

  • 【バッチプログラム】フォルダ内のファイル名から削除対象を決める

    OS:XP_SP3 TESTフォルダには、日付が頭についたTXT形式のファイルがあります。(例:20091011_XXXXX.txt) バッチを使用して、今日から30日前のファイルの削除を自動化したいと思っています。 ファイル名と現在日付を比較して削除対象を指定することができるのではないと思っています。 どうかご教授お願い致します。

  • 特定のフォルダに入れたファイルを一定時間が経過したら削除する方法 VBS ?

    特定のフォルダ >>例えば..\\a\folderに入れたファイルを一定時間が経過したら削除する方法を教えてください。 イメージとしてはタスクスケジューラなどで15分毎にバッチファイルが動作するように設定しておき、 そのバッチからvbsなどをキックして現在の時間と保存されているファイルの時間差を確認してvbs内で入力してある一定の時間を経過していたら削除というようなものにしたいと思っています。 動作のイメージは湧くのですが、いざvbsを書こうと何から手をつけていいのかもわからず、参考になるサイトや簡単なものであるのであれば作成のアドバイスを頂けたらと思い投稿いたしました。 またそのようなことを実現するフリーソフトなどあれば教えてください。よろしくお願いします。

  • PC内のフォルダとファイルを強制的に削除する仕組みについて

    PC内のあるフォルダ(例:d:\work)内にあるフォルダとファイルの作成日付が1週間以上経過している場合、強制的に該当のフォルダとファイルを削除する仕組みを作り、毎日定期的にバッチ処理をタスク起動で動かす様にしたいと思います。 何か良い方法はありますか? 宜しくお願い致します。

  • バックアップ(世代管理)機能のバッチファイルを作成したい

    バッチでバックアップファイルを作成したいです。 機能は下記のとおりです。  ・バックアップを毎営業日(平日)とる  ・3世代保存する  ・バックアップ処理成功後、最も古いバックアップを削除する まず、システム日付を取得して、YYYYMMDDフォルダを作成し、その配下に保存したいのです。 でもYYYYMMDDフォルダの作成方法がわかりません。 次に、システム日付より3日以上古い日付を見つけて、該当するものがあったら削除するようにしたいです。 書籍やこのサイトでいろいろ調べているのですが、わからなくて・・・。 このサイトではバッチではシステム日付YYYYMMDDでディレクトリを作成することは出来ない・・・という回答がありましたが、やはり不可能なのでしょうか? ご回答いただきたくよろしくお願いします。

  • MS-DOSでのファイル/フォルダ一括削除

    以下のようなフォルダ、ファイルがあるとし、LOGDIR下にある「200803」の文字列を 含まないファイル及びフォルダをDOSコマンド(Win2003)で削除(できれば一括で) する方法を模索しています。 Cドライブ   |   |   +LOGDIR      |      +---LOG20080228_084539    <--- 削除対象ディレクトリ      |     |      |     +-------log1.txt      |     |      |     +-------log2.txt      +---LOG20080229_101553    <--- 削除対象ディレクトリ      |     |      |     +-------log1.txt      |     |      |     +-------log2.txt      +---LOG20080301_132059    <--- 削除対象ディレクトリでない      |     |      |     +-------log1.txt      |     |      |     +-------log2.txt      +---LOG20080302_185945    <--- 削除対象ディレクトリでない      |     |      |     +-------log1.txt      |     |      |     +-------log2.txt      |      |-----test20080229_085523.txt    <--- 削除対象ファイル      |      |-----test20080229_092310.txt    <--- 削除対象ファイル      |      |-----test20080301_153859.txt    <--- 削除対象ファイルでない      | 方法をご存知の方、いらっしゃいませんか?

  • バッチファイルで古いフォルダを削除する方法

    バッチファイルを利用して条件のあったフォルダを削除したいと考えています。 フォルダ郡は「20091020」「20090720」など作成された日付がそのまま 名前になっています。 自動的に作成するバッチは既にあるのですが、現状このままですと 増える一方になってしまいます。 そこで3ヶ月以上前(今日よりマイナス90日) などの条件に合致したすべてのフォルダを削除する記述を 現在のバッチファイルに追加したいのですが、記述方法が分かりません。 ご存知の方いらっしゃいましたらお力をお貸しください。 よろしくお願いいたします。

  • サブディレクトリをネットワーク上の共有フォルダに移動するバッチを書きたい

    C:\Folder\日付のサブディレクトリ を ネットワーク上の共有フォルダに移動する  というコマンドをバッチで実行したいのですが、バッチに詳しくなくどう書けばよいのか分かりません。 (日付のサブディレクトリは、毎日作成されるようになっています。) どのようにすればよいでしょうか。 お手数ですが、教えて頂けると助かります。 どうぞよろしくお願い致します。

  • 複数階層にまたがる別名称フォルダ削除のコマンド

    Windows7を使用しています。 現在作成中のバッチで、下記の階層内にある複数のフォルダを1年分残して削除しようとしています。 最下位のフォルダ名称はYYYYMMDDHHMMSSの日付フォルダになっており、その日付フォルダにはtxtファイルが格納されていますが、日付フォルダごと削除したいと思っています。 C>  新規フォルダ>     アーカイブ>         ビルA>            1階>YYYYMMDDHHMMSS               YYYYMMDDHHMMSS                ・・・            2階>YYYYMMDDHHMMSS                ・・・         ビルB>            地下1階>YYYYMMDDHHMMSS                   YYYYMMDDHHMMSS                   ・・・         ビルC>             1階>YYYYMMDDHHMMSS                YYYYMMDDHHMMSS                YYYYMMDDHHMMSS                ・・・             2階>YYYYMMDDHHMMSS                ・・・             3階>YYYYMMDDHHMMSS                ・・・ コマンドは下記で削除しようと思っていますが、YYYYMMDDHHMMSSフォルダが名称が異なる複数のディレクトリに別れているため()にどう記述すればよいか困っています。 for /d %%Q in (    ) do if "%%Q" LSS "%ALOG%" rd /s %%Q 分かる方がいらっしゃれば教えていただけますでしょうか。 宜しくお願いします。