こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

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

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

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

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

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

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

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

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

投稿日時 - 2010-03-26 12:46:07

QNo.5780487

困ってます

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

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

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

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

投稿日時 - 2010-03-26 13:22:13

ANo.1

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

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

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 を実行させてください。

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2010-03-26 13:27:19

お礼

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

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

投稿日時 - 2010-03-26 14:17:09

あなたにオススメの質問