如何在批处理文件中循环遍历文件夹并重命名扩展名?

如何在批处理文件中循环遍历文件夹并重命名扩展名?

选择一个我可以运行的文件夹

ren *.jpeg *.png

我有多个文件夹。我想创建一个批处理文件,循环遍历所有文件夹并重命名其中的文件。

例如,我有文件夹TEST1TEST2内部根目录TEST。我想创建一个批处理,将和中的所有.jpeg文件重命名为。TEST1TEST2.png

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

我收到一个错误:

该系统找不到指定的文件

我不明白这个问题。

答案1

您没有将for命令应用于ren操作。

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

如果您以交互方式执行此操作而不是在批处理文件中执行此操作,则需要更改%%为。%

~重新添加的引号是为了避免包含空格的路径可能出现的任何错误。

答案2

或者,如果你想要一个稍微短一点的单行代码,下面是如何结合使用REN命令GLOBAL命令JP Software 的 TCC/LE

GLOBAL REN *.JPEG *.PNG

当然,如果您想忽略命令中的任何非零退出代码,请使用的GLOBAL选项。/IREN

答案3

完整的解决方案如下。

在“变量”部分设置变量:

@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

相关内容