- ベストアンサー
コマンドプロンプトで最新のファイル以外を削除
コマンドプロンプトで最新のファイルを2つ残してそれ以外を削除するバッチを作りましたがうまくいきません。お詳しい方、どこが間違っているのかアドバイスお願いいたします。 set /a cnt=0 for /f %%A in ('dir /B /O-D c:\test1\*.log') do ( call :chk %%A ) :chk REM カウンタが2以上なら削除 if %cnt% GEQ 2 ( echo %1 ) set /a cnt+=1
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
「うまくいかない」とはこういうことだったんですね… バッチの動作確認用にecho使ってるとばかり思ってましたよ。 「echo 何々」は「何々を画面に表示せよ」というコマンドなので、これで削除ができるはずもありません。 削除にはdelコマンドを使ってください。 最初の質問文バッチなら、 「echo %1」の所を「del /q %1」に 私の書いたものなら「del /q %%i」に変更です。 コマンドの内容は、del(削除) /q(確認なし)で確認なしに削除せよ、です。
その他の回答 (5)
- trajaa
- ベストアンサー率22% (2662/11921)
>括弧を取り除いてみましたがうまくいきません。 >ファイルが削除されません。 >なぜでしょう? えっ! そ、そ、それは。。。 バッチの動作確認ができない内に削除すると困るので、動作確認ができるまでは、わざとDelでなくEchoを使っているのだと思ってましたが。。。 echo を del に置き換えてみてください。
お礼
trajaa様、 おかげさまでうまくいきました。ありがとうございました。
- kamovback
- ベストアンサー率38% (10/26)
カウンタ使ってみた。質問のバッチと実際のバッチは違うみたいだし。 @echo off setlocal enabledelayedexpansion set /a cnt=0 for /f %%i in ('dir /b/o-d c:\test1\*.log') do ( if !cnt! geq 2 echo %%i set /a cnt+=1 )
補足
kamovback様 回答ありがとうございます。 バッチを実行してみましたが以下のように削除対象ファイルが表示されるだけで、ファイルそのものは削除されません。何が足りないのでしょう?ご教授頂ければ幸いですm(__)m test4.log test3.log test2.log test1.log
- kamovback
- ベストアンサー率38% (10/26)
書き間違えた(汗 こっちで。 for /f "skip=2" %%A in ('dir /b/o-d c:\test1\*.log') do @echo %%A
- trajaa
- ベストアンサー率22% (2662/11921)
うまくいかない内容がありませんが・・・・ 試してみたら、最新の2つとか関係なしに全部エコーしてるようですが そいう意味で「うまくいかない」のでしょうか? echo %1 の前後のカッコが余計なのでは? 取り除いたら、3番目のファイルからエコーするようになりますが?
補足
trajaa様 ご回答ありがとうございます。 >echo %1 の前後のカッコが余計なのでは? 括弧を取り除いてみましたがうまくいきません。 ファイルが削除されません。 なぜでしょう?
- kamovback
- ベストアンサー率38% (10/26)
ちゃんと動いてるけど、そんな面倒なことしなくても for /f "skip=2" %%A in ('dir /b/o-d c:\test1\*.log') do @echo %i こんなのでいいんじゃないのかな?
お礼
kamovback様、 バッチがうまく動作いたしました。 丁寧なアドバイス、ありがとうございました!