- 締切済み
バッチで特定のファイルを消す方法と日付の計算
いつもお世話になっております。 バッチの作成方法について教えてください。 tmpフォルダには日々ログファイルが作成されていきます。 ログファイルのファイル名はバラバラですが、必ず20140527のように yyyymmddの日付が入っています。 3日前のログはもう不要なので、削除したいのです。 (1)本日より3日前の計算はどのようにしたらよいでしょうか? (2)3日前の日付が入っているファイル名を削除するにはどのようにしたらよいでしょうか? 具体的にプログラムを書いて教えていただけないでしょうか。 お手数をおかけしますが、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kon77
- ベストアンサー率70% (83/117)
すみません。No.2ですが、バッチファイル内の一時ファイルの作成場所を間違えました。正しくは以下の通りです。失礼しました。書き込みの権限の問題です。 -------------------------------- @echo off rem ■ Perlで3日前の日時をファイル出力 perl "delete_old_file.pl" > "%TEMP%\delete_old_file.temp" rem ■ sedでファイル削除用のバッチに置換 sed -e "{ s/\///gi; s/^\([0-9]\{8,\}\)$/del \/q \1/gi; s/$/*.log/gi; }" "%TEMP%\delete_old_file.temp" > "%TEMP%\delete_old_file.temp.bat" rem ■ tmpフォルダへ移動 cd /d "tmp" rem ■ 作成したバッチでファイル削除 call "%TEMP%\delete_old_file.temp.bat" rem ■ カレントディレクトリの移動 cd /d "..\" rem ■ 一時ファイルの掃除 del /q "%TEMP%\delete_old_file.temp" del /q "%TEMP%\delete_old_file.temp.bat" --------------------------------
- kon77
- ベストアンサー率70% (83/117)
私はプログラミングは出来ませんが、もし自分がご質問の処理を行うなら以下のような感じで書きます。パスやカレントディレクトリの移動は環境に合わせて書き換えて下さい。 まず以下の線内の内容を「delete_old_file.pl」としてテキストファイルで保存します。 -------------------------------- sub show_date { my $tm = shift; my ($day, $month, $year) = (localtime($tm))[3..5]; printf "%04d/%02d/%02d\n", $year + 1900, $month + 1, $day; } # 3日前を表示 show_date(time - 72 * 3600); -------------------------------- 次に以下の線内の内容を、適当な名前を付けてバッチファイルとして保存するか、既存のバッチファイルに組み込みます。 -------------------------------- @echo off rem ■ Perlで3日前の日時をファイル出力 perl "delete_old_file.pl" > "delete_old_file.temp" rem ■ sedでファイル削除用のバッチに置換 sed -e "{ s/\///gi; s/^\([0-9]\{8,\}\)$/del \/q \1/gi; s/$/*.log/gi; }" "delete_old_file.temp" > "delete_old_file.temp.bat" rem ■ tmpフォルダへ移動 cd /d "tmp" rem ■ 作成したバッチでファイル削除 call "..\delete_old_file.temp.bat" rem ■ カレントディレクトリの移動 cd /d "..\" rem ■ 一時ファイルの掃除 del /q "delete_old_file.temp" del /q "delete_old_file.temp.bat" -------------------------------- Perlスクリプトの方はそのままの記述で良いですが、バッチファイルの内容は全てパスが通るように書き換えてから実行して下さい。 上記の例は、tmpフォルダの一つ上のフォルダをカレントディレクトリとした場合です。ログファイル名は「yyyymmdd*.log」だった場合の例です。 あと、上記のバッチファイルを実行するには、「Perl」と「sed」がインストールされ、パスが通っている必要があります。 上記のバッチファイルを実行すると、tmpフォルダ内の、3日前の日付から始まるlogファイルが削除されるはずです。 私はプログラミングは出来ませんが、Perlを理解すれば、Perlだけで処理出来るかも知れません。 ■ 参考にしたページ「前日・翌日の取得 - Perl表技集」 http://www2u.biglobe.ne.jp/MAS/perl/waza/yesterday.html
- hayaumepapa
- ベストアンサー率22% (7/31)
>具体的にプログラムを書いて教えていただけないでしょうか。 >お手数をおかけしますが、よろしくお願いします 具体的に言語も指定できないような方が、 ファイルを消去するプログラムを作るのは 非常に危険だと思います。
お礼
ありがとうございました。 おかげでなんとかなりました。