Как массово переименовать папки через Excel: от таблицы к автоматическому скрипту

Переименование десятков или сотен папок вручную — задача утомительная и чреватая ошибками. Особенно когда нужно привести имена к единому формату, добавить префиксы, заменить символы или синхронизировать названия с данными из базы. К счастью, Excel в паре с PowerShell или Batch-скриптами позволяет автоматизировать этот процесс за считанные минуты.

В этой статье вы найдёте пошаговые инструкции для Windows и macOS, готовые шаблоны скриптов, а также советы по обработке сложных случаев: работы с кириллицей, специальными символами и вложенными папками. Мы разберём два основных подхода — через PowerShell (рекомендуется для Windows) и Bash (для macOS/Linux), а также покажем, как подготовить данные в Excel, чтобы скрипт сработал без ошибок.

Если вы никогда не работали с командной строкой — не беспокойтесь. Все примеры кода в статье готовы к использованию: достаточно скопировать, вставить и заменить пути на свои. А для тех, кто хочет глубже понять механику, мы добавили раздел с пояснениями, как работают ключевые команды.

Подготовка данных в Excel: структура таблицы для переименования

Первый и самый важный шаг — правильно организовать данные в Excel. От этого зависит, насколько легко скрипт сможет их обработать. Минимально необходимые колонки:

  • 📁 Текущее имя папки — точное название папки до переименования (включая регистр!).
  • 🆕 Новое имя папки — желаемое название после переименования.
  • 📂 Путь к папке (опционально) — если папки находятся в разных директориях, укажите полный путь к каждой.

Пример правильной структуры:

Текущее имя Новое имя Путь (опционально)
Фото_2023 Отпуск_Италия_2023 C:\Users\Имя\Documents\Фото\
Договор_123 Контракт_КлиентА_2026 D:\Работа\Документы\
project_old project_v2_final E:\Projects\

Критически важно: если в именах папок есть пробелы или специальные символы (например, &, #, (), оберните их в таблице в кавычки. Например: "Фото & Видео". Это предотвратит ошибки при выполнении скрипта.

⚠️ Внимание: Не используйте в новых именах папок символы \ / : * ? " < > | — они запрещены в Windows и macOS. Excel не блокирует их ввод, но скрипт завершится с ошибкой.

Экспорт данных из Excel в формат для скрипта

Скрипты для переименования не умеют напрямую читать файлы .xlsx. Поэтому данные нужно экспортировать в промежуточный формат — CSV (разделитель — запятая) или TXT (разделитель — табуляция). Как это сделать:

  1. Выделите все ячейки с данными (включая заголовки колонок).
  2. Перейдите в меню Файл → Сохранить как.
  3. В поле "Тип файла" выберите CSV (разделители — запятые) (*.csv).
  4. Сохраните файл в удобную папку (например, C:\rename_script\data.csv).

Если в ваших данных есть запятые (например, в именах папок), лучше использовать формат TXT с табуляцией:

  • При сохранении выберите Текстовый файл (с разделителями табуляции) (*.txt).
  • Убедитесь, что в настройках Excel стоит галочка Сохранять расширение файла.
📊 Какой формат вы предпочитаете для экспорта данных?
CSV (разделитель - запятая)
TXT (разделитель - табуляция)
Не знаю, что выбрать
Использую другой формат

После экспорта откройте полученный файл в Блокноте или VS Code, чтобы проверить, корректно ли разделились данные. Например, строка должна выглядеть так:

"Фото_2023","Отпуск_Италия_2023","C:\Users\Имя\Documents\Фото\"
⚠️ Внимание: Если в путях к папкам есть кириллические символы, сохраните CSV-файл в кодировке UTF-8. Для этого после экспорта откройте файл в Блокноте, выберите Файл → Сохранить как → в поле "Кодировка" укажите UTF-8.

Скрипт для Windows: переименование через PowerShell

PowerShell — самый надёжный инструмент для массового переименования в Windows. Он поддерживает кириллицу, длинные пути и позволяет гибко обрабатывать ошибки. Ниже готовый скрипт, который читает данные из CSV и переименовывает папки:

# Укажите путь к вашему CSV-файлу

$csvPath = "C:\rename_script\data.csv"

Импортируем данные

$data = Import-Csv -Path $csvPath -Delimiter "," -Encoding UTF8

Переменная для счёта успешных операций

$successCount = 0

foreach ($row in $data) {

$oldName = $row."Текущее имя"

$newName = $row."Новое имя"

$folderPath = $row."Путь (опционально)"

# Если путь не указан, используем текущую директорию скрипта

if ([string]::IsNullOrEmpty($folderPath)) {

$folderPath = (Get-Location).Path

}

# Полные пути к старой и новой папкам

$oldFullPath = Join-Path -Path $folderPath -ChildPath $oldName

$newFullPath = Join-Path -Path $folderPath -ChildPath $newName

# Проверяем существование папки

if (Test-Path -Path $oldFullPath -PathType Container) {

try {

Rename-Item -Path $oldFullPath -NewName $newName -ErrorAction Stop

$successCount++

Write-Host "✅ Переименовано: $oldName → $newName" -ForegroundColor Green

}

catch {

Write-Host "❌ Ошибка при переименовании $oldName : $_" -ForegroundColor Red

}

}

else {

Write-Host "⚠️ Папка не найдена: $oldFullPath" -ForegroundColor Yellow

}

}

Write-Host "`nГотово! Успешно переименовано папок: $successCount из $($data.Count)" -ForegroundColor Cyan

Как использовать скрипт:

  1. Скопируйте код выше в Блокнот и сохраните файл с расширением .ps1 (например, rename_folders.ps1).
  2. Откройте PowerShell от имени администратора (правый клик по значку → Запуск от имени администратора).
  3. Разрешите выполнение скриптов, введя команду:
    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

    (подтвердите изменение, нажав Y).

  4. Перейдите в папку со скриптом:
    cd C:\rename_script\
  5. Запустите скрипт:
    .\rename_folders.ps1

Сохранил CSV-файл в кодировке UTF-8|

Проверил пути к папкам на наличие ошибок|

Создал резервную копию важных данных|

Запустил PowerShell от имени администратора|

Разрешил выполнение скриптов командой Set-ExecutionPolicy

-->

Если скрипт выдаёт ошибку недопустимый токен в путях с кириллицей, добавьте в начало файла строку:

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

Скрипт для macOS/Linux: переименование через Bash

На macOS и Linux удобнее использовать Bash. Ниже скрипт, который читает данные из CSV и переименовывает папки с учётом особенностей Unix-систем (например, регистрозависимости имён):

#!/bin/bash

Укажите путь к CSV-файлу

CSV_FILE="data.csv"

Разделитель (запятая или табуляция)

DELIMITER=","

Проверяем существование файла

if [ ! -f "$CSV_FILE" ]; then

echo "❌ Ошибка: файл $CSV_FILE не найден!"

exit 1

fi

Счётчик успешных операций

success_count=0

Чтение CSV построчно, пропуская заголовок

tail -n +2 "$CSV_FILE" | while IFS=$DELIMITER read -r old_name new_name folder_path; do

# Удаляем кавычки, если они есть

old_name=$(echo "$old_name" | tr -d '"')

new_name=$(echo "$new_name" | tr -d '"')

folder_path=$(echo "$folder_path" | tr -d '"')

# Если путь не указан, используем текущую директорию

if [ -z "$folder_path" ]; then

folder_path="."

fi

# Полные пути

old_full_path="${folder_path%/}/$old_name"

new_full_path="${folder_path%/}/$new_name"

# Проверяем существование папки

if [ -d "$old_full_path" ]; then

if mv "$old_full_path" "$new_full_path" 2>/dev/null; then

echo "✅ Переименовано: $old_name → $new_name"

((success_count++))

else

echo "❌ Ошибка при переименовании $old_name (возможно, имя уже существует)"

fi

else

echo "⚠️ Папка не найдена: $old_full_path"

fi

done

echo "Готово! Успешно переименовано папок: $success_count"

Инструкция по запуску:

  1. Сохраните скрипт в файл с расширением .sh (например, rename_folders.sh).
  2. Сделайте файл исполняемым:
    chmod +x rename_folders.sh
  3. Запустите:
    ./rename_folders.sh

Если имена папок содержат пробелы или специальные символы, скрипт автоматически обработает их благодаря кавычкам в CSV. Для путей с кириллицей убедитесь, что терминал поддерживает кодировку UTF-8Terminal.app это настройка по умолчанию).

Обработка сложных случаев: кириллица, вложенные папки, ошибки

Даже с готовыми скриптами могут возникнуть проблемы. Рассмотрим типичные сценарии и их решения:

1. Кириллица в именах папок

Если скрипт не видит папки с русскими названиями:

  • 🔄 Убедитесь, что CSV сохранён в UTF-8 (в Windows используйте Notepad++ или VS Code для проверки).
  • 📛 В PowerShell добавьте в начало скрипта:
    [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
    

    [Console]::InputEncoding = [System.Text.Encoding]::UTF8

  • 🐧 В macOS/Linux проверьте локаль терминала командой locale. Если вывод содержит ANSI_X3.4-1968, установите UTF-8:
    export LANG=en_US.UTF-8

2. Вложенные папки

Если нужно переименовать папки внутри других папок (например, Папка1\ПодпапкаАПапка1\ПодпапкаБ), укажите полные пути в CSV. Пример:

"ПодпапкаА","ПодпапкаБ","C:\Projects\Папка1\"

"Старые_фото","Архив_2020","D:\Фото\Отпуск\"

3. Папка с таким именем уже существует

Если скрипт выдаёт ошибку Cannot create a file when that file already exists:

  • 🔍 Проверьте CSV на дубликаты в колонке Новое имя.
  • 📝 Добавьте в скрипт автоматическое резервное копирование:
    if (Test-Path -Path $newFullPath) {
    

    $backupName = $newName + "_backup_" + (Get-Date -Format "yyyyMMddHHmm")

    Rename-Item -Path $newFullPath -NewName $backupName

    }

Ошибка Причина Решение
Cannot find path Неверный путь к папке или опечатка в имени Проверьте CSV на лишние пробелы/кавычки. Используйте Get-ChildItem для отладки.
Access denied Недостаточно прав или папка открыта в другом процессе Запустите скрипт от имени администратора. Закройте все программы, использующие папки.
Invalid characters Запрещённые символы в новом имени Замените \ / : * ? " < > | на подчёркивания или удалите их.
Как отладить скрипт, если он не работает?

1. Добавьте в скрипт команду Write-Host (PowerShell) или echo (Bash) перед каждой операцией, чтобы увидеть, какие данные он обрабатывает.

2. Запустите скрипт для одной папки, указав её данные прямо в коде (без CSV).

3. Проверьте права доступа: в PowerShell используйте Get-Acl, в Bash — ls -la.

4. Если проблема с кириллицей, конвертируйте CSV в UTF-8 без BOM (в Notepad++: Кодировки → Преобразовать в UTF-8 без BOM).

Автоматизация для продвинутых: динамические имена и формулы Excel

Если имена папок зависят от внешних данных (например, дат, номеров контрактов или клиентских ID), можно сгенерировать их прямо в Excel с помощью формул. Примеры:

  • 📅 Добавление даты:
    =CONCATENATE("Проект_"; TEXT(TODAY(); "yyyy-mm-dd"))

    Результат: Проект_2026-05-15.

  • 🔢 Нумерация папок:
    =CONCATENATE("Клиент_"; ROW()-1)

    Результат: Клиент_1, Клиент_2 и т. д.

  • 🔤 Замена символов:
    =SUBSTITUTE(A2; " "; "_")

    Заменяет пробелы на подчёркивания.

После генерации имён экспортируйте данные в CSV и используйте стандартный скрипт. Если формулы сложные, сохраните их значения: выделите колонку → КопироватьСпециальная вставка → Значения.

Для автоматизации процесса можно связать Excel с PowerShell через VBA. Например, этот макрос запускает скрипт прямо из Excel:

Sub RunRenameScript()

Dim scriptPath As String

scriptPath = "C:\rename_script\rename_folders.ps1"

Shell "powershell.exe -ExecutionPolicy Bypass -File """ & scriptPath & """", vbNormalFocus

End Sub

⚠️ Внимание: Макросы в Excel могут быть опасны, если вы запускаете файлы из ненадёжных источников. Перед использованием проверьте код на наличие подозрительных команд (например, Delete, Remove-Item -Recurse).

Альтернативные инструменты: когда Excel не подходит

Если вам нужно переименовать тысячи папок или требуется более гибкая логика (например, регулярные выражения), рассмотрите специализированные утилиты:

Инструмент Платформа Особенности
Bulk Rename Utility Windows Графический интерфейс, поддержка regex, предварительный просмотр изменений.
NameChanger macOS Простой интерфейс, работа с метаданными файлов, бесплатная версия.
mmv (утилита Unix) Linux/macOS Консольная утилита для массового переименования по шаблонам.
Advanced Renamer Windows/macOS Поддержка CSV, скрипты на JavaScript, работа с EXIF-данными изображений.

Эти инструменты полезны, если:

  • 📊 Вам нужно предварительно увидеть, как будут выглядеть новые имена (в Excel это сделать сложно).
  • 🔄 Требуется рекурсивное переименование (включая вложенные папки на любой глубине).
  • 📝 Нужно переименовать папки на основе метаданных (например, даты создания или размера).

Однако для одноразовых задач или когда данные уже структурированы в Excel, самостоятельный скрипт остаётся самым гибким решением — он не требует установки ПО и работает даже на машинах с ограниченными правами.

FAQ: Частые вопросы по массовому переименованию

Можно ли отменить переименование, если что-то пошло не так?

Да, но только если вы заранее создали резервную копию или ведёте лог изменений. PowerShell/Bash не имеют встроенной функции "отмены". Рекомендуем:

  1. Перед запуском скрипта создайте архив папок (например, с помощью 7-Zip или tar).
  2. Добавьте в скрипт запись лога:
    Start-Transcript -Path "C:\rename_script\log.txt" -Append

    (в PowerShell) или перенаправьте вывод в файл:

    ./rename_folders.sh > log.txt 2>&1

    (в Bash).

Если ошибка уже произошла, восстановите имена из лога или архива.

Скрипт переименовал не те папки. Как исправить?

Наиболее частая причина — неверные пути в CSV или опечатки в именах. Чтобы избежать этого:

  • Перед массовым запуском протестируйте скрипт на одной папке, указав её данные вручную в коде.
  • Используйте Dir (Windows) или ls (macOS/Linux), чтобы убедиться, что пути в CSV совпадают с реальными:
  • Get-ChildItem -Path "C:\Test\" | Select-Object Name, FullName

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

Как переименовать папки на сетевом диске или в облаке (Google Drive, OneDrive)?

Для сетевых дисков (\\server\folder):

  • Убедитесь, что путь указан в формате \\?\UNC\server\folder (для PowerShell).
  • Запускайте скрипт с правами пользователя, имеющего доступ к сетевой папке.

Для облачных хранилищ:

  • Синхронизируйте папки на локальный диск, переименуйте их, затем загрузите обратно.
  • Используйте API облака (например, Google Drive API или OneDrive SDK), если нужно переименовать прямо в облаке.

Пример для Google Drive (требуется Python и библиотека google-api-python-client):

from googleapiclient.discovery import build

from google.oauth2 import service_account

Авторизация и переименование файлов/папок

service = build('drive', 'v3', credentials=service_account.Credentials.from_service_account_file('credentials.json'))

service.files().update(fileId='ID_ПАПКИ', body={'name': 'НОВОЕ_ИМЯ'}).execute()

Можно ли переименовать папки на Android или iOS?

На мобильных устройствах массовое переименование сложнее из-за ограничений ОС. Возможные решения:

  • 📱 Android: Используйте файловый менеджер с поддержкой скриптов (например, FX File Explorer + Termux для запуска Bash-скриптов).
  • 🍎 iOS: Установите Pythonista 3 или a-Shell для запуска Python/Bash-скриптов. Альтернатива — переименовать на компьютере, затем синхронизировать через iCloud Drive.
  • ☁️ Для обоих платформ: загрузите файлы в облако (Google Drive, Dropbox), переименуйте на компьютере, затем скачайте обратно.

Пример Bash-скрипта для Termux (Android):

#!/bin/bash

cd /sdcard/Download/

for old in *; do

new=$(echo "$old" | tr ' ' '_') # Заменяет пробелы на подчёркивания

mv "$old" "$new"

done

Как переименовать папки рекурсивно (включая все вложенные)?

Для рекурсивного переименования модифицируйте скрипт, чтобы он обходил подпапки. Пример для PowerShell:

Get-ChildItem -Path "C:\MyFolder\" -Recurse -Directory | ForEach-Object {

$newName = $_.Name.Replace("старое", "новое") # Ваша логика переименования

Rename-Item -Path $_.FullName -NewName $newName -ErrorAction SilentlyContinue

}

Для Bash:

find /путь/к/папке -type d | while read -r dir; do

oldname=$(basename "$dir")

newname=$(echo "$oldname" | sed 's/старое/новое/g') # Ваша логика

mv "$dir" "$(dirname "$dir")/$newname" 2>/dev/null

done

⚠️ Осторожно: рекурсивное переименование может затрагивать системные папки. Всегда тестируйте на копии данных!