Как можно массово изменить имена файлов в папке, добавив к ним свою собственную нумерацию?

Вам необходимо переименовать файлы в папке, в частности фотографии, так, чтобы они имели следующую нумерацию: <br/> 1-1.jpg <br/> 1-2.jpg <br/> 2-1.jpg <br/> 2-2.jpg <br/> 3-1.jpg <br/> 3-2.jpg и так далее, вместо простого последовательного назначения, как 1.jpg, 2.jpg и т.д. <br/><br/> Какую программу или скрипт вы можете порекомендовать для реализации такой задачи? Заранее благодарю.
  • 4 сентября 2024 г. 12:42
Ответы на вопрос 2
Для массового переименования файлов с заданной вами формой нумерации можно использовать несколько подходов, включая программы и скрипты. Ниже я предложу несколько вариантов, включая использование PowerShell на Windows, Bash на Linux и macOS, а также Python.

### Вариант 1: PowerShell (для Windows)

Вы можете воспользоваться следующим скриптом PowerShell:

1. Откройте PowerShell.
2. Перейдите в папку с файлами, используя команду `cd`.
3. Запустите следующий скрипт:

```powershell
$files = Get-ChildItem -Path "C:\Path\To\Your\Folder" -Filter "*.jpg"
$counter = 1
$groupCounter = 1

foreach ($file in $files) {
    Rename-Item -Path $file.FullName -NewName ("$groupCounter-$counter" + $file.Extension)
    $counter++

    if ($counter -gt 2) {
        $counter = 1
        $groupCounter++
    }
}
```

Замените `C:\Path\To\Your\Folder` на путь к вашей папке с фотографиями.

### Вариант 2: Bash (для Linux или macOS)

Откройте терминал и выполните следующий скрипт:

```bash
#!/bin/bash

counter=1
groupCounter=1
for file in /path/to/your/folder/*.jpg; do
    mv "$file" "/path/to/your/folder/${groupCounter}-${counter}.jpg"
    counter=$((counter + 1))

    if [ $counter -gt 2 ]; then
        counter=1
        groupCounter=$((groupCounter + 1))
    fi
done
```

Не забудьте заменить `/path/to/your/folder/` на путь к вашей папке.

### Вариант 3: Python

Если у вас установлен Python, вы можете использовать следующий скрипт:

```python
import os

folder = 'path/to/your/folder'
files = sorted([f for f in os.listdir(folder) if f.endswith('.jpg')])

counter = 1
group_counter = 1

for filename in files:
    new_name = f"{group_counter}-{counter}.jpg"
    os.rename(os.path.join(folder, filename), os.path.join(folder, new_name))
    counter += 1
    
    if counter > 2:
        counter = 1
        group_counter += 1
```

Замените `path/to/your/folder` на путь к вашей папке.

### Заключение

Выберите один из подходящих вам вариантов в зависимости от вашей операционной системы и предпочтений. Обязательно сделайте резервную копию файлов перед выполнением операции, чтобы избежать потери данных.
В линуксе: 
rename 's/(\d+)(\..*)$/sprintf("%d-%d%s", ($1+1)>>1, ($1-1)%2+1, $2)/e' *

В виндовсе bat-файлом:
@echo off
setlocal enabledelayedexpansion
for %%f in (*.jpg) do (
  set name=%%~nf
  set ext=%%~xf
  set /a n1="(%name+1)/2"
  set /a n2="((%name-1)&1)+1"
  rename %%f !n1!-!n2!!ext!
)
endlocal
Похожие вопросы