• ベストアンサー

コマンドプロンプトで最新のファイル以外を削除

コマンドプロンプトで最新のファイルを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

質問者が選んだベストアンサー

  • ベストアンサー
  • kamovback
  • ベストアンサー率38% (10/26)
回答No.6

「うまくいかない」とはこういうことだったんですね… バッチの動作確認用にecho使ってるとばかり思ってましたよ。 「echo 何々」は「何々を画面に表示せよ」というコマンドなので、これで削除ができるはずもありません。 削除にはdelコマンドを使ってください。 最初の質問文バッチなら、 「echo %1」の所を「del /q %1」に 私の書いたものなら「del /q %%i」に変更です。 コマンドの内容は、del(削除) /q(確認なし)で確認なしに削除せよ、です。

isymhdo
質問者

お礼

kamovback様、 バッチがうまく動作いたしました。 丁寧なアドバイス、ありがとうございました!

その他の回答 (5)

  • trajaa
  • ベストアンサー率22% (2662/11921)
回答No.5

>括弧を取り除いてみましたがうまくいきません。 >ファイルが削除されません。 >なぜでしょう? えっ! そ、そ、それは。。。 バッチの動作確認ができない内に削除すると困るので、動作確認ができるまでは、わざとDelでなくEchoを使っているのだと思ってましたが。。。 echo を del に置き換えてみてください。

isymhdo
質問者

お礼

trajaa様、 おかげさまでうまくいきました。ありがとうございました。

  • kamovback
  • ベストアンサー率38% (10/26)
回答No.4

カウンタ使ってみた。質問のバッチと実際のバッチは違うみたいだし。 @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 )

isymhdo
質問者

補足

kamovback様 回答ありがとうございます。 バッチを実行してみましたが以下のように削除対象ファイルが表示されるだけで、ファイルそのものは削除されません。何が足りないのでしょう?ご教授頂ければ幸いですm(__)m test4.log test3.log test2.log test1.log

  • kamovback
  • ベストアンサー率38% (10/26)
回答No.3

書き間違えた(汗 こっちで。 for /f "skip=2" %%A in ('dir /b/o-d c:\test1\*.log') do @echo %%A

  • trajaa
  • ベストアンサー率22% (2662/11921)
回答No.2

うまくいかない内容がありませんが・・・・ 試してみたら、最新の2つとか関係なしに全部エコーしてるようですが そいう意味で「うまくいかない」のでしょうか? echo %1 の前後のカッコが余計なのでは? 取り除いたら、3番目のファイルからエコーするようになりますが?

isymhdo
質問者

補足

trajaa様 ご回答ありがとうございます。 >echo %1 の前後のカッコが余計なのでは? 括弧を取り除いてみましたがうまくいきません。 ファイルが削除されません。 なぜでしょう?

  • kamovback
  • ベストアンサー率38% (10/26)
回答No.1

ちゃんと動いてるけど、そんな面倒なことしなくても for /f "skip=2" %%A in ('dir /b/o-d c:\test1\*.log') do @echo %i こんなのでいいんじゃないのかな?

関連するQ&A