web-dev-qa-db-ja.com

フォルダをループして、バッチファイルの拡張子の名前を変更するにはどうすればよいですか?

実行できる単一のフォルダーを選択する

ren *.jpeg *.png

複数のフォルダがあります。すべてのフォルダーをループし、その中のファイルの名前を変更するバッチファイルを作成したいと思います。

たとえば、ルートディレクトリTEST内にフォルダTEST1TEST2があります。 .jpegおよびTEST1内のすべてのTEST2ファイルの名前を.pngに変更するバッチを作成したいと思います。

FOR /R "E:\TEST\" %%G in (*.jpeg) DO ren *.jpeg *.png

エラーが発生します:

システムは、指定されたファイルを見つけることができません

私はその問題を理解していません。

2
user839765

forコマンドをrenアクションに適用していません。

for /r "E:\test\" %%G in (*.jpeg) do ren "%%~G" *.png

バッチファイルではなくインタラクティブにこれを行う場合は、%%%に変更する必要があります。

~は、スペースを含むパスで発生する可能性のあるエラーを回避するために、再度追加された引用符を削除します。

3
paradroid

または、少し短いワンライナーが必要な場合は、 RENコマンドGLOBAL commmand in JP Software's TCC/LE

GLOBAL REN *.JPEG *.PNG

もちろん、GLOBALコマンドからのゼロ以外の終了コードを無視する場合は、REN/Iオプションを使用します。

1
JdeBP

完全なソリューションは以下のとおりです。

セクション「変数」で変数を設定します。

@echo off

::only to tell user what this bat are doing
echo.1.initializing...

::enable that thing to allow, for example, incremental counter in a for loop :)
echo.- EnableDelayedExpansion
SETLOCAL EnableDelayedExpansion

::variables
echo.- variables
:: - place here the absolute root path of your files
set path2work="C:\Documents and Settings\ubirajara2\Desktop\Nova pasta"
set extension2exclude=jpeg
set extension2put=png

::only an auxiliar variable
set pathbak=%cd%

::go to %path2work% and its drive letter
echo.- entering the path you want
for /f "delims=¯" %%i in ('echo.%path2work%') do %%~di
cd %path2work%

::search all subfolders and save them to a temp file
echo.- searching for subfolders
echo.%path2work%>%temp%\tmpvar.txt
for /f "delims=¯" %%i in ('dir /s /b /on /ad') do echo."%%i">>%temp%\tmpvar.txt

::execute command for root folder and all found subfolders
echo.
echo.2.executing...
for /f "delims=¯" %%i in (%temp%\tmpvar.txt) do (
  cd %%i
  echo.- in folder: %%i
  for /f "delims=¯" %%j in ('dir /b /on /a-d *.%extension2exclude%') do (
    set newname=%%~nj.%extension2put%
    echo.- renaming from "%%j" to "!newname!"...
    ren "%%j" "!newname!"
  )
)

echo.
echo.3.exiting...
::return to %pathbak% and its driveletter
for /f "delims=¯" %%i in ('echo.%pathbak%') do %%~di
cd %pathbak%

@echo on
0
kokbira