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

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

A 回答 (6件)

「うまくいかない」とはこういうことだったんですね…



バッチの動作確認用にecho使ってるとばかり思ってましたよ。
「echo 何々」は「何々を画面に表示せよ」というコマンドなので、これで削除ができるはずもありません。
削除にはdelコマンドを使ってください。

最初の質問文バッチなら、
「echo %1」の所を「del /q %1」に
私の書いたものなら「del /q %%i」に変更です。

コマンドの内容は、del(削除) /q(確認なし)で確認なしに削除せよ、です。
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/06/08 20:07

>括弧を取り除いてみましたがうまくいきません。


>ファイルが削除されません。
>なぜでしょう?

えっ!
そ、そ、それは。。。
バッチの動作確認ができない内に削除すると困るので、動作確認ができるまでは、わざとDelでなくEchoを使っているのだと思ってましたが。。。

echo を del に置き換えてみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/06/08 20:06

カウンタ使ってみた。

質問のバッチと実際のバッチは違うみたいだし。

@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

補足日時:2007/06/07 21:52
    • good
    • 0

書き間違えた(汗 こっちで。



for /f "skip=2" %%A in ('dir /b/o-d c:\test1\*.log') do @echo %%A
    • good
    • 0

うまくいかない内容がありませんが・・・・



試してみたら、最新の2つとか関係なしに全部エコーしてるようですが
そいう意味で「うまくいかない」のでしょうか?

echo %1 の前後のカッコが余計なのでは?
取り除いたら、3番目のファイルからエコーするようになりますが?

この回答への補足

trajaa様

ご回答ありがとうございます。

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

補足日時:2007/06/07 21:51
    • good
    • 0

ちゃんと動いてるけど、そんな面倒なことしなくても



for /f "skip=2" %%A in ('dir /b/o-d c:\test1\*.log') do @echo %i

こんなのでいいんじゃないのかな?
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています