
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Excel(エクセル) マクロのコードを、少しでも削って短くしたい 3 2022/08/30 07:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) 2つのマクロを連続して動かしたい 3 2022/09/20 23:46
- その他(プログラミング・Web制作) フォルダを一括で作成する方法 0 2022/07/27 19:19
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
このQ&Aを見た人はこんなQ&Aも見ています
-
Batch: フォルダ内の特定のファイル以外を全て削除
その他(プログラミング・Web制作)
-
バッチファイルを使ってテキストファイルの任意の行を削除したい
その他(プログラミング・Web制作)
-
バッチファイルで昨日の日付を取得
その他(プログラミング・Web制作)
-
-
4
【バッチファイル】ファイル名で、文字列の範囲を指定して一括削除するコードをください
Windows 10
-
5
DOSコマンドで指定日数よりも過去のフォルダを削除
その他(プログラミング・Web制作)
-
6
日付でファイルを削除するbatファイルの作り方
Windows 95・98
-
7
Windowsで指定「以外」のファイルを移動したい
IT・エンジニアリング
-
8
net use /d の強制実行
iOS
-
9
ファイル名を特定の文字までを削除したい
フリーソフト
-
10
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
11
【バッチプログラム】フォルダ内のファイル名から削除対象を決める
その他(プログラミング・Web制作)
-
12
DataGridViewでyyyy/MM/dd
Visual Basic(VBA)
-
13
バッチ処理 特定の文字以降をリネーム
Ruby
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
コマンドプロンプトでファイル...
-
バッチファイルで、iniファイル...
-
コマンドプロンプトで変数が数...
-
フォルダ内の更新日時が一番新...
-
スタートアップのファイルをバ...
-
ファイル名の頭5桁と同名のフォ...
-
[DOS] コピー先に同じファイル...
-
ExcelVBAのDirでスペース含むフ...
-
aタグのhrefにネットワークパス...
-
【DOSバッチ開発】末尾のタブの...
-
.batでファイル名から抽出して...
-
ファイル名を一括してリネーム...
-
バッチファイルで同一フォルダ...
-
ftp処理でmove(移動)を行いたい
-
ファイル名を該当フォルダ内か...
-
サブフォルダからファイルをコ...
-
バッチにて複数のcsvファイルを...
-
画像フォルダをまとめるバッチ...
-
ファイル名を変更して移動させ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
[DOS] コピー先に同じファイル...
-
コマンドプロンプトでファイル...
-
バッチファイルで、iniファイル...
-
ftp処理でmove(移動)を行いたい
-
コマンドプロンプトで変数が数...
-
ExcelVBAのDirでスペース含むフ...
-
ファイル名の頭5桁と同名のフォ...
-
フォルダ内の更新日時が一番新...
-
サブフォルダからファイルをコ...
-
バッチコマンドでファイル名の...
-
access,vbaでフォルダ内のファ...
-
ファイル名を一括してリネーム...
-
スタートアップのファイルをバ...
-
VBA GetAttrについて教えてくだ...
-
aタグのhrefにネットワークパス...
-
【DOSバッチ開発】末尾のタブの...
-
.batでファイル名から抽出して...
-
word VBA ファイル名 保存
-
Windowsコマンドプロンプトで、...
おすすめ情報