
Windows7を使用しています。
バッチコマンドで、C:\新規フォルダ\LOGに作成された“LOG_YYYYMMDD”と言うテキストファイルを30日前を残して全て削除したいと思っています。
その他ファイルやフォルダが混在する可能性があるので”LOG_”がついたフォルダを対象として削除したいのですが、どのようにすれば良いでしょうか?
パターンを考えてみましたが、どちらも足りない部分があるようで上手くいきません。
(1)for /r C:\新規フォルダ\LOG %%D in (LOG_*.txt) do if "%%D" LSS "%ANS%" del /s /q %%D
※(1)のifの"%%D"のままではダメなのは分かるのですが、どのようにしたら良いのか困っています。
(2)for /r C:\新規フォルダ\LOG %%D in (LOG_*.txt) do (
set DELDATE=%%D
if "%DELDATE%" LSS "%ANS%" del /s DELDATE
)
簡単な解説もいただけると助かります。
宜しくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
No1です。
回答したのは、書いたとおり、
>LOG*.txtというファイル名の、最新30個を残してそれ以外を消す
の場合です。
補則に書かれているサンプルファイルを見ると、ファイルが30個もないので、何も削除されないのが正常です。
上に書いた条件じゃ無くて、
「LOG*.txtというファイル名に含まれる8桁の数字を、年月日とみなして、それが現在の日付より30日以上前であれば削除」
ということですかね?毎日1つずつファイルが作られるので無ければ、「最新30個」というわけには行かないので、30日前の日付を求めないといけませんが、すこし変更して、
「LOG*.txtというファイル名に含まれる8桁の数字を、年月日とみなして、それが前月同日の日付より前であれば削除」
ということであれば、大の月小の月やうるう年など考えなくていいので楽です。
(正確な30日前の日付を求めるのは面倒)
set YYYY=%DATE:~0,4%
set MM=%DATE:~5,2%
set DD=%DATE:~8,2%
set /a MM=1%MM%-1
if %MM%==100 set /a MM=12, YYYY-=1
set FILE=LOG_%YYYY%%MM:~-2%%DD% ← これで前月同日のファイル名ができた
cd /d C:\新規フォルダ\LOG
for %%A in (LOG_*.txt) do if %%A lss %FILE% del %%A
再度アドバイスいただき有難うございます。
ファイルは今のところほぼ毎日作成されるので、とりあえず時間もなかったこともあり最初にご投稿いただいたコマンドにて実行することに致しました。
まだ改善していく予定なので、こちらで教えていただいたのも試してみたいと思います。
有難うございます。
No.2
- 回答日時:
横からで申し訳ありませんが、
>実行してみたのですが上手く削除されないようです。
>このコマンドはファイルの作成日時でみているのでしょうか?
dir /b /o-d
の/oオプションの働きをヘルプで確認して下さい。
dは日付順(更新日付)なので、質問者さんがやりたいことは名前順になると思いますので
dir /b /o-n
になると思います。
あと(2)ですが、うまくいかない原因の一つに遅延展開があるように思います。
for文の中で set DELDATE=%%D で環境変数に代入していますが、バッチでは環境変数の遅延展開というものがあって、この場合 %DELDATE% で参照した値は繰り返しの中で変化してくれません。
%DELDATE% を !DELDATE! にする必要があります。
遅延展開はデフォルトでは無効になっているので先に有効にする必要があります。
setlocal enabledelayedexpansion
詳しくは、「環境変数 遅延展開」 などで検索するといいでしょう。
また、既に実施しているかもしれませんが、
@echo %変数名%
や
@echo !変数名!
を入れて常に変数名を表示させてチェックするようにすると問題点が見つけやすいと思います。
御礼が遅くなってしまいましたが、有難うございました。
色々検索して試してみたのですが、まだ上手く遅延展開が使いこなせなく、今回は時間もなかったため断念致しました。
また引き続き勉強していきたいと思います。
No.1
- 回答日時:
書かれているスクリプトは意味不明なので無視します。
LOG*.txtというファイル名の、最新30個を残してそれ以外を消す
ということであれば、
cd /d C:\新規フォルダ\LOG
for /f "skip=30" %%A in ('dir /b /o-d LOG*.txt') do del %%A
この回答への補足
御回答有難うございます。
実行してみたのですが上手く削除されないようです。
このコマンドはファイルの作成日時でみているのでしょうか?
すみませんが教えていただけますでしょうか。
ちなみに今LOGフォルダにテスト用に用意しているファイルは6つで以下の内容です。
ファイル名 作成日時
LOG_19959596.txt 2012/9/11
LOG_20101010.txt 2012/9/11
LOG_20101221.txt 2012/10/19
LOG_20110801.txt 2012/10/19
LOG_20120915.txt 2012/10/19
LOG_20121012.txt 2012/10/19
いかがコマンド実行の結果です。
C:\新規フォルダ\batch>cd /d C:\新規フォルダ\LOG
C:\新規フォルダ\LOG>for /F "skip=30" %A in ('dir /b /o-d LOG*.txt') do del %A
御礼が遅くなり大変失礼いたしました。
今回はシンプルにこちらで教えていただいたコマンドで対応することにしました。
非常に助かりました、有難うございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Batch: フォルダ内の特定のファイル以外を全て削除
その他(プログラミング・Web制作)
-
バッチファイルで昨日の日付を取得
その他(プログラミング・Web制作)
-
batである文字列内に特定の文字列が含まれているか確認したい
その他(プログラミング・Web制作)
-
-
4
【バッチプログラム】フォルダ内のファイル名から削除対象を決める
その他(プログラミング・Web制作)
-
5
【バッチファイル】ファイル名で、文字列の範囲を指定して一括削除するコードをください
Windows 10
-
6
バッチファイルを使ってテキストファイルの任意の行を削除したい
その他(プログラミング・Web制作)
-
7
net use /d の強制実行
iOS
-
8
txtファイルから特定の文字列が書かれた行だけを取得や削除するソフト
フリーソフト
-
9
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
10
ファイル名を特定の文字までを削除したい
フリーソフト
-
11
linuxのシェルでファイル名に先月以前の日付があるのを削除したい
その他(プログラミング・Web制作)
-
12
DataGridViewでyyyy/MM/dd
Visual Basic(VBA)
-
13
バッチ処理 特定の文字以降をリネーム
Ruby
-
14
コマンドプロンプトで作成日時を表示させたい
その他(コンピューター・テクノロジー)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
DOSのバッチ作成について‐FORの...
-
ファイル名を該当フォルダ内か...
-
ファイル名を一括してリネーム...
-
Windowsコマンドプロンプトで、...
-
【DOSバッチ開発】末尾のタブの...
-
バッチファイルで、iniファイル...
-
コマンドプロンプトでファイル...
-
aタグのhrefにネットワークパス...
-
ファイル名の頭5桁と同名のフォ...
-
コマンドプロンプトで変数が数...
-
エクセルVBAを使用してJPGファ...
-
ファイル名に使える記号
-
コマンドプロンプトでのCSV...
-
画像をコピーしてリネームするbat②
-
ftp処理でmove(移動)を行いたい
-
バッチ処理で16進数でファイル...
-
大量のフォルダからひとつのフ...
-
バッチでテキストファイルから...
-
コマンドプロンプトのエラーに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
コマンドプロンプトでファイル...
-
バッチファイルで、iniファイル...
-
ExcelVBAのDirでスペース含むフ...
-
ftp処理でmove(移動)を行いたい
-
[DOS] コピー先に同じファイル...
-
バッチコマンドでファイル名の...
-
フォルダ内の更新日時が一番新...
-
コマンドプロンプトで変数が数...
-
ファイル名に ” を使うと エク...
-
DOSのバッチ作成について‐FORの...
-
access,vbaでフォルダ内のファ...
-
【DOSバッチ開発】末尾のタブの...
-
サブフォルダからファイルをコ...
-
スタートアップのファイルをバ...
-
エクセルVBAを使用してJPGファ...
-
バッチファイルで同一フォルダ...
-
バッチ処理で16進数でファイル...
-
コマンドプロンプトでのCSV...
-
ファイル名の頭5桁と同名のフォ...
おすすめ情報