バッチファイルでfor文でrenの処理が何度も行われてしまいます


@echo off
set b=0
for /r "C:\" %%f in (*.png) do (
set name=%%~nf%
call :next
)
goto end

:next
ren "%name%.png" "picture%b%.png"
set /a b=b+1
goto :eof

:end
echo 画像ファイルは%b%枚でした

というファイルの中の画像ファイルをカウントし、カウントした数をつけてリネームするというバッチファイルを作ろうとしています
ですが、リネームしたあとのpicture数字.pngファイルをまた処理してしまって
ファイルの数が多くカウントされてしまいます
また、2度目実行した時などに同名のファイルが存在するというエラーが出るのですが
同名のファイルが有る時も無理やりリネームするということができるでしょうか?

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/10/02 20:16:23

回答1件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

>同名のファイルが有る時も無理やりリネームするということができるでしょうか?

どういうふうに リネームするんですか?

無理すると 上書きとなり 前のファイルは なくなりますよ。

それでいいのならば まず その名前で削除してから その名前にリネームすればいいでしょう。


あとは 別フォルダにするかですよね。

Windowsでは 同名のファイルがある場合(1)とかつけて 別ファイル名にしていますが。

  • id:okamotoy
     そのバッチファイルだとCドライブの全部のファイルを走査するので,たとえばシステムフォルダ下の変更してはいけないファイルまでrenされてしまいます.
     それはよろしくないので,renしてよいフォルダを指定しましょう.

     それから,2回以上実行すると以前のren後のファイル名がそこに存在するので,2回目以降はファイル名が重複します.
     ファイル名称の確認後にrenするのが良いです.

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません