dポイントプレゼントキャンペーン実施中!

【コマンドプロンプト】複数フォルダのファイル名一括置換の方法について

お世話になっております。

コマンドプロンプトを使用して、カレントフォルダ配下のすべてのフォルダに格納されているEXCELファイルの名称の最初に[LOCAL]という文字を加えたいと考えています。

ファイル一括置換を行うフリーソフト(ファイル名変換君など)では、可能なのですが、
対象のファイルは、バッチファイルで他のフォルダからファイルをコピーをしてきているため、ファイル名変更もコピーの際に一括でできないかと思い質問をさせていただきました。

現在、同じフォルダに格納されているファイルに対しては、下記にて実行はできています。
for %i in (*.xls) do ren %i [LOCAL]%i

しかし、カレントフォルダの配下すべてのフォルダを対象にしたいため、下記のように変更すると、エラーとなってしまいます。
for /r %i in (*.xls) do ren %i [LOCAL]%i

おそらく・・・変数%iに、ファイルのフルパスが格納されてしまい、思い通りの動作になっていないと推測しています。

どのように作成すればよいか教えていただけませんでしょうか。

よろしくお願いいたします。

A 回答 (2件)

私の環境では、これでうまく行きました。



for /r %%i in (*.xls) do ren "%%i" "[LOCAL]%%~ni.xls"

参考URL:http://sgry.jp/pgarticles/batch.html
    • good
    • 0

対象が


「現フォルダ(ディテクトリ)直下のフォルダ」が条件ですが

for /d %a in ( *.* ) do ren %a LOCAL_%a

で一応イケます。Windows2000SP4 の command ですが確認しました。

(/d で対象をフォルダのみに指定 )
(ren %a LOCAL_%a でフォルダ名の頭にLOCALを付ける)

ただ、原因不明ですが「頭にLOCAL_ を付ける」をなぜか2~3回行って
しまい、LOCAL_LOCAL_LOCAL_folder...
のような名前になってしまう事が頻発しました。
成功した事もあるので、なぜそうなるのかわかりません。

Windows のコマンドプロンプトによっても異なるかも知れないので、
事前にテスト環境でテストしてください。
リネームでファイルを失う事はありませんが、大量だと元に戻すだけでも
大変なので。

ならば、ということで、同じ構造を利用して
「フォルダ名を1つずつリネームするバッチファイルを作る」
という手を考えました。

最初にファイル BATCH.BAT が存在しない事を確認し、ある場合は削除して下さい。
既に他の用途に使ってるならファイル名を変更してください。

for /d %a in ( *.* ) do echo ren %a LOCAL_%a >>BATCH.BAT

これを実行するとバッチファイル BATCH.BAT が作られ、中身が
ren folder1 LOCAL_folder1
ren folder2 LOCAL_folder2
ren folder3 LOCAL_folder3
:
のようになりますから、そしたら BATCH.BAT を実行させてください。
「【コマンドプロンプト】複数フォルダのファ」の回答画像2
    • good
    • 0
この回答へのお礼

バッチファイルを作成するという発想がありませんでしたので、
非常に参考になりました。

フォルダ名のrenameの際は、shokker02さんのコマンドを使用させていただきます。
ご回答いただき、ありがとうございました。

お礼日時:2010/03/26 14:17

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