1

コードは次のとおりです。

for /r %%a in (*.jpg, *.png, *.bmp, *.exe) do (
  for /d %%d in (%CD%) do (
    set newname=%%~nd%~x1
    ren "%%~a" "!newname!%%~Xa"
    echo media file in %%~fa renamed to "!newname!%%~Xa"
  )
)

主な問題は、サブフォルダー内のファイルが、bat ファイルを実行する親ディレクトリ名として filename で終わることです。

何が起こるかの例:

C:\parent\name.jpg renamed to C:\parent\parent.jpg
C:\parent\child\name.jpg renamed to C:\parent\child\parent.jpg
C:\parent\child1\child2\name.jpg renamed to C:\parent\child1\child2\parent.jpg

私は欲しい:

C:\parent\1.jpg rename to C:\parent\parent.jpg
C:\parent\child\1.jpg rename to C:\parent\child\child.jpg
C:\parent\child1\child2\name.jpg renamed to C:\parent\child1\child2\child2.jpg

何か助けはありますか?

4

1 に答える 1

4

これにより、ren コマンドが画面に表示されます。実際に名前変更を実行するには
、キーワードを削除します。echo

@echo off
for /r %%a in (*.jpg *.png *.bmp *.exe) do for %%b in ("%%~dpa\.") do echo ren "%%~a" "%%~nxb%%~xa"
pause

最初の %%a FOR コマンドは、各ファイル仕様を再帰的に返します。各ファイルの形式は次のとおりです。
c:\path\to\folder\filename.ext

2 番目の %%b FOR にはc:\path\to\folder部分が与えられ\.、最後に追加されてc:\path\to\folder\.、現在のディレクトリに解決され、ファイル名として to解釈されます。folder

したがって、この場合%%~nxbは %%b のファイル名と拡張子が返さfolderれ、名前変更コマンドで使用されます。 %%~xa%%a 文字列の .extension を返します。

コードを調べて、それがかなり明確であることを願っています。

FOR /?ヘルプの最後のページでは、メタ変数について説明しています。

于 2013-10-13T00:40:36.240 に答える