web-dev-qa-db-ja.com

ファイル拡張子の一括名前変更を再帰的に(Windowsバッチ)

非常に複雑なディレクトリ構造に多数のファイルがあり、議論する価値がない理由で、拡張子が「.inp」のすべてのファイルの名前を「.TXT」拡張子に変更する必要があります。触れたくない他の拡張子のファイルが他にもたくさんあります。少なくとも5レベル下で再帰的にやりたいです。

これまでのところ:

for /d %%x in (*) do pushd %%x & Ren *.inp *.TXT & popd

...しかし、これはディレクトリの1レベルだけ下に行きます。

誰か助けてもらえますか?前もって感謝します!

20
Raiden616
for /r startdir %%i in (*.inp) do ECHO ren "%%i" "%%~ni.txt"

あなたのために働くはずです。 startdirを開始ディレクトリ名に置き換えます。これが問題なく機能することを確認したら、echoの前にあるrenを削除して、実際に名前を変更します。


ダウンボーターの場合:バッチファイルの実行は、コマンドプロンプトからの実行とは異なります。各%%xここで、xはメタ変数(ループ制御変数)を%に減らす必要があります。そう

for /r startdir %i in (*.inp) do ECHO ren "%i" "%~ni.txt"

これをプロンプトから実行すると機能するはずです。 echoに関する注意をお読みください。

21
Magoo

Windows 7では、次の1行のコマンドが機能し、*。js内のすべてのファイルの名前を* .jsに再帰的に変更します。

FOR /R %x IN (*.js) DO ren "%x" *.txt
30
john smith

ジョン・スミスの答えは素晴らしく、うまくいきます。しかし、完全に明確にするために(正しい構文を理解するためにmagooのメモを読み直さなければなりませんでした)、これがまさにあなたがする必要があることです...

BATCH FILE:
FOR /R %%x IN (*.js) DO ren "%%x" *.txt

COMMAND LINE:
FOR /R %x IN (*.js) DO ren "%x" *.txt

彼らの回答に賛成票を投じて、私は控えめなフォーマッターです...

4
Roger Hill