2

Выбрав одну папку, я мог бы запустить

ren *.jpeg *.png

У меня есть несколько папок. Я хочу создать командный файл, который будет перебирать все папки и переименовывать файлы в нем.

Например, у меня есть папки TEST1 и TEST2 внутри корневого каталога TEST . Я хочу создать пакет, который переименует все файлы .jpeg в TEST1 и TEST2 в .png .

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

Я получаю ошибку:

Система не может найти указанный файл

Я не понимаю проблему.

3 ответа3

3

Вы не применяете команду for к действию ren .

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

Вам нужно изменить %% на % если вы делаете это в интерактивном режиме, а не в пакетном файле.

Повторно добавленные кавычки ~ удаляют любые возможные ошибки с путями, которые содержат пробелы.

1

Или, если вам нужна более короткая однострочная строка , вот как это сделать, используя комбинацию команды REN и команды GLOBAL в программе JP Software TCC/LE:

GLOBAL REN *.JPEG *.PNG

Используйте опцию GLOBAL s /I если вы хотите, конечно, игнорировать любые ненулевые коды выхода из команды REN .

0

Полное решение ниже.

Установите переменные в разделе "переменные":

@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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .