Переименование десятков или сотен папок вручную — задача утомительная и чреватая ошибками. Особенно когда нужно привести имена к единому формату, добавить префиксы, заменить символы или синхронизировать названия с данными из базы. К счастью, 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 (разделитель — табуляция). Как это сделать:
- Выделите все ячейки с данными (включая заголовки колонок).
- Перейдите в меню
Файл → Сохранить как. - В поле "Тип файла" выберите
CSV (разделители — запятые) (*.csv). - Сохраните файл в удобную папку (например,
C:\rename_script\data.csv).
Если в ваших данных есть запятые (например, в именах папок), лучше использовать формат TXT с табуляцией:
- При сохранении выберите
Текстовый файл (с разделителями табуляции) (*.txt). - Убедитесь, что в настройках Excel стоит галочка
Сохранять расширение файла.
После экспорта откройте полученный файл в Блокноте или 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
Как использовать скрипт:
- Скопируйте код выше в Блокнот и сохраните файл с расширением
.ps1(например,rename_folders.ps1). - Откройте
PowerShellот имени администратора (правый клик по значку →Запуск от имени администратора). - Разрешите выполнение скриптов, введя команду:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser(подтвердите изменение, нажав
Y). - Перейдите в папку со скриптом:
cd C:\rename_script\ - Запустите скрипт:
.\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"
Инструкция по запуску:
- Сохраните скрипт в файл с расширением
.sh(например,rename_folders.sh). - Сделайте файл исполняемым:
chmod +x rename_folders.sh - Запустите:
./rename_folders.sh
Если имена папок содержат пробелы или специальные символы, скрипт автоматически обработает их благодаря кавычкам в CSV. Для путей с кириллицей убедитесь, что терминал поддерживает кодировку UTF-8 (в Terminal.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 не имеют встроенной функции "отмены". Рекомендуем:
- Перед запуском скрипта создайте архив папок (например, с помощью
7-Zipилиtar). - Добавьте в скрипт запись лога:
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
⚠️ Осторожно: рекурсивное переименование может затрагивать системные папки. Всегда тестируйте на копии данных!