2

Это занятие почты, расположенной здесь, и раскручивание вещей немного. Как правило, я пытаюсь переименовать несколько изображений в папке в название папки, в которой они находятся, а затем добавить суффикс "photo1", "photo2" и т.д.

Другими словами, я пытаюсь идти отсюда:

Folder1
  IMG_001.jpg
  IMG_001.jpg
  IMG_003.jpg

Сюда:

Folder1
  Folder1_photo1.jpg
  Folder1_photo2.jpg
  Folder1_photo3.jpg

Поймайте, есть несколько сотен этих папок, и каждая из них должна будет переименовать фотографии внутри.

Я знаю, что есть стороннее программное обеспечение, которое может сделать это, но я ищу способ запустить это как Windows .bat.

Если у кого-то есть идея, пожалуйста, поделитесь. Спасибо за ваше время.

5 ответов5

4

Предполагая, что все папки находятся в одной корневой папке, и все изображения соответствуют шаблону IMG_n.jpg, в командной строке должен работать следующий один вкладыш:

for /d %A in ("yourRootPath\*") do @for %B in ("%A\img_*.jpg") do @for /f "tokens=1* delims=_0" %C in ("%~nB") do ren "%B" "%~nxA_photo%D.jpg"

Не забудьте удвоить проценты, если вы используете команду в пакетном скрипте.

2

Я вижу, что вы просили Batch, но другие могут найти PowerShell полезным

Get-Childitem "C:\my\folder\" -Recurse -Include *.jpg | ForEach {             
    Rename-Item $_ "$($_.Directory.Name)_$($_.Name -ireplace "img_(0+)", "photo").jpg
}
1

Как близко вы должны получить?

Это должно быть сделано, но оно будет содержать 0 в цифрах, например, folder1_photo001.jpg вместо folder1_photo1.jpg:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

for /d %%d in (*) do (

    for %%f in ("%%d/img_*.jpg") do (
        set fname=%%f
        set fname=!fname:IMG_=photo!
        echo ren "%%d/%%f" "%%d/%%d_!fname!"
    )
)

(Это выведет команды переименования, которые он будет запускать. Уберите echo чтобы оно действительно запускало их. Сначала сделайте резервную копию, убедитесь, что вы довольны ею, нет отмены и т.д.).

Я не могу придумать хорошую альтернативу, если вам нужен 1 вместо 001. Замена 00 out может привести к изменению имени, если в имени также есть номер, а подсчет будет прерван, если числа не являются смежными.

[править: взято из другого ответа, я предполагал, что картинки - единственные вещи в папках. Теперь выглядит только для img_*.jpg pattern].

0

Гораздо более простой подход. Я не уверен, что это работает, но попробуйте.

cd "path of the folder that contains the photos"

for /L %%n in (1 1 %random%) do (

    for %%f in (*.jpg) do (

        rename "%%f" "photo_%%n.jpg"

    )

)
0

Посмотрите на какое-нибудь программное обеспечение под названием Irfanview. В него встроено множество сложных утилит для переименования, изменения размера, преобразования и т.д. Я думаю, что это будет делать то, что вы хотите.

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