実行できる単一のフォルダーを選択する
ren *.jpeg *.png
複数のフォルダがあります。すべてのフォルダーをループし、その中のファイルの名前を変更するバッチファイルを作成したいと思います。
たとえば、ルートディレクトリTEST
内にフォルダTEST1
とTEST2
があります。 .jpeg
およびTEST1
内のすべてのTEST2
ファイルの名前を.png
に変更するバッチを作成したいと思います。
FOR /R "E:\TEST\" %%G in (*.jpeg) DO ren *.jpeg *.png
エラーが発生します:
システムは、指定されたファイルを見つけることができません
私はその問題を理解していません。
for
コマンドをren
アクションに適用していません。
for /r "E:\test\" %%G in (*.jpeg) do ren "%%~G" *.png
バッチファイルではなくインタラクティブにこれを行う場合は、%%
を%
に変更する必要があります。
~
は、スペースを含むパスで発生する可能性のあるエラーを回避するために、再度追加された引用符を削除します。
または、少し短いワンライナーが必要な場合は、 REN
コマンド と GLOBAL
commmand in JP Software's TCC/LE :
GLOBAL REN *.JPEG *.PNG
もちろん、GLOBAL
コマンドからのゼロ以外の終了コードを無視する場合は、REN
の/I
オプションを使用します。
完全なソリューションは以下のとおりです。
セクション「変数」で変数を設定します。
@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