- ベストアンサー
データ削除についてご教授下さい
こんばんは。 フォルダ単位で削除する方法を考えています。 状況:特定のディレクトリに日付(例:20050901)のフォルダが存在し、 翌月2日(タスクスケジューラにて実行)に前月データフォルダ(例フォルダ名に200509**) を削除する方法を考えています。 ※できるだけ処理内容は簡単にしたい ※特定ディレクトリに前月のデータフォルダリストの作成は可能(200509.txt) 上記の条件でバッチを作成したいと思っているのですが、 Windows2003Serverで動作させられるでしょうか? ご教授ください、宜しくお願いします。
- みんなの回答 (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/
その他の回答 (1)
- catby
- ベストアンサー率65% (50/76)
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/
お礼
回答ありがとうございます。 ActivePerlの導入も考えたのですが、SWのインストールが 許されない状況でしたので、今回はUNIXのコマンドを利用することにしました。 ありがとうございました。またご教授下さい!
お礼
回答ありがとうございます。 今回は案2を参考にしgawk.exeを配置処理させることにし、また他の処理にも活用できました。 大変参考になりました。またご教授ください。