アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっております。
バッチの作成方法について教えてください。

tmpフォルダには日々ログファイルが作成されていきます。
ログファイルのファイル名はバラバラですが、必ず20140527のように
yyyymmddの日付が入っています。

3日前のログはもう不要なので、削除したいのです。

(1)本日より3日前の計算はどのようにしたらよいでしょうか?
(2)3日前の日付が入っているファイル名を削除するにはどのようにしたらよいでしょうか?

具体的にプログラムを書いて教えていただけないでしょうか。
お手数をおかけしますが、よろしくお願いします。

A 回答 (3件)

すみません。

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"
--------------------------------
    • good
    • 0
この回答へのお礼

ありがとうございました。
おかげでなんとかなりました。

お礼日時:2014/10/31 10:07

私はプログラミングは出来ませんが、もし自分がご質問の処理を行うなら以下のような感じで書きます。

パスやカレントディレクトリの移動は環境に合わせて書き換えて下さい。

まず以下の線内の内容を「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/yesterd …
    • good
    • 0

>具体的にプログラムを書いて教えていただけないでしょうか。


>お手数をおかけしますが、よろしくお願いします

具体的に言語も指定できないような方が、
ファイルを消去するプログラムを作るのは
非常に危険だと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!