Как переименовать папки по списку из Excel: 3 рабочих метода

Переименование сотен папок вручную — утомительное занятие, которое отнимает часы рабочего времени. Если у вас есть готовый список новых названий в Excel, почему бы не автоматизировать процесс? Эта статья поможет разобраться, как связать данные из электронной таблицы с файловой системой, используя PowerShell, Python или даже стандартные инструменты Windows.

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

Инструкции подойдут как для системных администраторов, так и для обычных пользователей, которым нужно структурировать фотоархив или упорядочить проектные папки. Все примеры кода протестированы на Windows 10/11 и Excel 2019/365, но при необходимости адаптируются под другие версии.

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

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

Минимально необходимые столбцы:

  • 📁 Текущее имя папки — точное название (с учётом регистра!), как оно отображается в проводнике
  • 🆕 Новое имя папки — желаемое название после переименования
  • 📂 Путь к родительской папке — полный путь до директории, где находятся переименовываемые папки (например, C:\Projects\2026\)

Дополнительные столбцы, которые облегчат работу:

  • Статус — для отметки обработанных папок ("Готово"/"Ошибка")
  • 🔍 Примечания — причины ошибок или особые условия (например, "Не переименовывать, если содержит файл readme.txt")

Пример правильно оформленной таблицы:

Текущее имяНовое имяПутьСтатус
Old_ProjectНовый_проект_2026D:\Work\Archives\Ожидает
Photos_2023Фото_отпуск_ИталияE:\My_Pictures\Ожидает
Temp_FilesВременные_файлыC:\Users\Admin\Downloads\Готово

Обратите внимание на важные нюансы:

⚠️ Внимание: Если в пути или именах папок есть пробелы, скрипт должен обрабатывать их как часть имени, обёрнутого в кавычки. В Excel это не видно, но критично для командной строки.

Метод 1: PowerShell — быстрое решение без установки ПО

PowerShell — встроенный инструмент Windows, который идеально подходит для массового переименования. Мы экспортируем данные из Excel в .csv и используем их в скрипте.

Шаги для выполнения:

  1. Сохраните таблицу Excel в формате CSV (разделители — запятые) с кодировкой UTF-8 (важно для кириллицы!)
  2. Откройте PowerShell ISE (или любую другую среду для скриптов)
  3. Вставьте и адаптируйте следующий код:
$data = Import-Csv -Path "C:\path\to\your\file.csv" -Encoding UTF8

foreach ($row in $data) {

$oldPath = Join-Path -Path $row.Путь -ChildPath $row."Текущее имя"

$newPath = Join-Path -Path $row.Путь -ChildPath $row."Новое имя"

if (Test-Path -Path $oldPath) {

Rename-Item -Path $oldPath -NewName $row."Новое имя" -Force

Write-Host "Переименовано: $oldPath → $newPath" -ForegroundColor Green

} else {

Write-Host "Не найдено: $oldPath" -ForegroundColor Red

}

}

Пояснения к коду:

  • 📌 Import-Csv -Encoding UTF8 — гарантирует корректное чтение кириллических символов
  • 🔄 Join-Path — правильно объединяет пути даже с пробелами
  • -Force — перезаписывает существующие папки без запроса

Имена столбцов в CSV совпадают с именами в коде ($row.Путь)|Путь к CSV-файлу указан верно|У вас есть права на изменение папок|Сделан бэкап важных данных-->

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

  • Либо папка с новым именем уже существует
  • Либо в пути есть недопустимые символы (например, ?, *, /)
📊 Какой инструмент вы предпочитаете для автоматизации задач?
PowerShell
Python
Batch-файлы
Специализированное ПО

Метод 2: Python — гибкость и кросс-платформенность

Для тех, кто работает с MacOS/Linux или нуждается в расширенной логике (например, проверке содержимого папок перед переименованием), подойдёт Python. Установите библиотеки pandas и openpyxl для работы с Excel:

pip install pandas openpyxl

Пример скрипта с обработкой ошибок:

import pandas as pd

import os

Чтение Excel-файла

df = pd.read_excel("rename_list.xlsx", engine='openpyxl')

for _, row in df.iterrows():

old_path = os.path.join(row['Путь'], row['Текущее имя'])

new_name = row['Новое имя']

new_path = os.path.join(row['Путь'], new_name)

try:

os.rename(old_path, new_path)

print(f"✅ Успешно: {old_path} → {new_path}")

df.at[_, 'Статус'] = 'Готово'

except FileNotFoundError:

print(f"❌ Не найдено: {old_path}")

df.at[_, 'Статус'] = 'Ошибка: не найдено'

except PermissionError:

print(f"⚠️ Нет прав: {old_path}")

df.at[_, 'Статус'] = 'Ошибка: доступ запрещён'

except Exception as e:

print(f"💥 Неожиданная ошибка: {e}")

df.at[_, 'Статус'] = f'Ошибка: {str(e)}'

Сохранение отчёта

df.to_excel("rename_report.xlsx", index=False)

Преимущества этого метода:

  • 🐍 Работает на любой ОС (включая macOS и Linux)
  • 📊 Автоматически генерирует отчёт с результатами
  • 🔧 Легко добавить дополнительную логику (например, проверку файлов внутри папок)
⚠️ Внимание: Если в путях есть кириллические символы, убедитесь, что ваш терминал поддерживает UTF-8. В Windows может потребоваться команда chcp 65001 перед запуском скрипта.

Метод 3: Batch-файл для простых задач

Если вам нужно одноразовое решение без установки дополнительного ПО, подойдёт обычный .bat-файл. Этот метод ограничен по функционалу, но работает "из коробки" на любой Windows.

Алгоритм действий:

  1. Сохраните таблицу в CSV с разделителем ; (точка с запятой)
  2. Создайте текстовый файл с расширением .bat и вставьте код:
@echo off

chcp 65001 >nul

setlocal enabledelayedexpansion

set "csv_file=rename_list.csv"

for /f "tokens=1-3 delims=;" %%a in (%csv_file%) do (

set "old_path=%%c\%%a"

set "new_name=%%b"

set "new_path=%%c\!new_name!"

if exist "!old_path!" (

ren "!old_path!" "!new_name!"

echo Переименовано: !old_path! --^> !new_path!

) else (

echo Не найдено: !old_path!

)

)

pause

Ограничения этого метода:

  • 🚫 Не поддерживает пути с пробелами без дополнительных манипуляций
  • 📛 Нет обработки ошибок (кроме "не найдено")
  • 🔠 Кириллица в путях может работать нестабильно
Как обработать пути с пробелами в batch-файле?

Используйте кавычки вокруг переменных пути и добавьте параметр usebackq в команду for:

for /f "usebackq tokens=1-3 delims=;" %%a in ("%csv_file%") do (

set "old_path=%%c\%%a"

...

)

Это позволит корректно обрабатывать пути типа C:\My Documents\Project\

Типичные ошибки и как их избежать

Даже с правильно написанным скриптом можно столкнуться с проблемами. Вот самые распространённые ловушки и способы их обхода:

ОшибкаПричинаРешение
Cannot create a file when that file already exists Папка с новым именем уже существует Добавьте проверку if not exist "new_path" перед переименованием
Access is denied Недостаточно прав или папка открыта в другом процессе Запустите скрипт от имени администратора или закройте все программы, использующие папку
Краковые символы вместо кириллицы Неверная кодировка CSV-файла Сохраните CSV в UTF-8 с BOM или используйте ANSI для Windows
The filename, directory name, or volume label syntax is incorrect Недопустимые символы в имени (/?*:|") Замените запрещённые символы в Excel до экспорта (функция =ПОДСТАВИТЬ())

Ещё несколько неочевидных моментов:

  • 🕒 Длина пути: В Windows максимальная длина пути — 260 символов. Для длинных путей используйте префикс \\?\ (например, \\?\C:\very_long_path\...)
  • 🔄 Регистр символов: Windows не чувствительна к регистру в путях, но Linux/macOS — чувствительна. Учитывайте это при кросс-платформенной работе
  • 📂 Скрытые папки: Убедитесь, что в настройках проводника включен показ скрытых файлов (Вид → Скрытые элементы)

Автоматизация для регулярных задач

Если переименование папок по списку из Excel — ваша регулярная задача, имеет смысл создать универсальное решение. Вот несколько идей для оптимизации:

1. Шаблон Excel с макросом:

  • 📥 Добавьте кнопку "Экспорт для переименования", которая сохраняет данные в нужном формате
  • 🔄 Автоматически проверяет дубликаты в новых именах
  • ✅ Отмечает обработанные папки цветом

2. Графический интерфейс на Python (Tkinter):

Для нетехнических пользователей можно создать простое окно с полями для выбора файла Excel и кнопкой "Запустить". Пример кода:

import tkinter as tk

from tkinter import filedialog

import pandas as pd

import os

def select_file():

file_path = filedialog.askopenfilename(filetypes=[("Excel files", ".xlsx;.xls")])

if file_path:

process_file(file_path)

def process_file(file_path):

df = pd.read_excel(file_path)

# ... (логика переименования из предыдущего примера)

tk.messagebox.showinfo("Готово", "Переименование завершено!")

root = tk.Tk()

tk.Button(root, text="Выбрать файл Excel", command=select_file).pack()

root.mainloop()

3. Интеграция с Total Commander:

Популярный файловый менеджер поддерживает Multi-Rename Tool и может импортировать списки переименования из CSV:

  1. Выделите папки в Total Commander
  2. Нажмите Ctrl+M (или Файлы → Переименовать групповой...)
  3. Импортируйте данные из CSV через кнопку Загрузить

Безопасность и резервное копирование

Массовые операции с файловой системой всегда несут риски. Вот чек-лист для минимизации потенциальных проблем:

Создан бэкап всех переименовываемых папок|Проверена корректность путей в Excel (нет опечаток)|Скрипт протестирован на копии данных|Закрыты все программы, использующие целевые папки|Есть план отката в случае сбоя-->

Для бэкапа папок в Windows можно использовать:

  • 💾 Встроенную утилиту robocopy:
    robocopy C:\source D:\backup /E /ZB /R:3 /W:5 /LOG:backup.log
  • 📦 Архиваторы с поддержкой многотомности (например, 7-Zip с параметром -v100m для разбивки на файлы по 100 МБ)
⚠️ Внимание: Если вы работаете с сетевыми папками, убедитесь, что скрипт имеет достаточные права доступа. Для доменных сетей может потребоваться запуск от имени доменного администратора или настройка делегирования прав.

Для отката изменений сохраните в Excel дополнительный столбец с оригинальными именами или используйте журнал переименования (например, в PowerShell):

$log = @()

foreach ($row in $data) {

$log += [PSCustomObject]@{

OldPath = $oldPath

NewPath = $newPath

Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"

Status = "Success" # или "Failed"

}

}

$log | Export-Csv -Path "rename_log.csv" -NoTypeInformation -Encoding UTF8

FAQ: Ответы на частые вопросы

Можно ли переименовать папки на сетевом диске таким же способом?

Да, но есть нюансы:

  • Убедитесь, что сетевой диск подключён (проверьте командой net use)
  • Пути должны быть в формате \\server\share\folder или Z:\folder (если диск сопоставлен)
  • Скрипт должен запускаться с правами пользователя, имеющего доступ к сетевой папке

Для PowerShell может потребоваться явное указание учётных данных:

$cred = Get-Credential

Invoke-Command -ComputerName FILESERVER -ScriptBlock { ... } -Credential $cred

Как переименовать только папки, соответствующие определённому шаблону?

Добавьте фильтрацию в скрипт. Например, в PowerShell:

foreach ($row in $data | Where-Object { $_. "Текущее имя" -like "Project_*" }) {

# Логика переименования

}

Или в Excel заранее отфильтруйте данные и экспортируйте только нужные строки.

Что делать, если в новых именах нужно использовать данные из нескольких столбцов?

Соберите новое имя прямо в Excel с помощью формулы. Например, если нужно объединить столбцы A (префикс), B (основное имя) и C (суффикс):

=СЦЕПИТЬ(A2; "_"; B2; "_"; ТЕКСТ(C2; "0000"))

Затем экспортируйте только итоговый столбец с готовыми именами.

Как переименовать папки на Linux-сервере по списку из Excel?

Используйте Python-скрипт с библиотекой paramiko для работы по SSH:

import paramiko

import pandas as pd

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect('your_server_ip', username='user', password='pass')

df = pd.read_excel("rename_list.xlsx")

for _, row in df.iterrows():

old_path = f"/remote/path/{row['Текущее имя']}"

new_path = f"/remote/path/{row['Новое имя']}"

command = f"mv '{old_path}' '{new_path}'"

stdin, stdout, stderr = ssh.exec_command(command)

print(stdout.read().decode())

ssh.close()

Не забудьте:

  • Проверять права доступа на сервере (chmod)
  • Экранировать специальные символы в именах
  • Использовать SFTP вместо SSH для больших объёмов данных
Можно ли отменить массовое переименование, если что-то пошло не так?

Да, если вы ведёте лог изменений. Например, в PowerShell можно создать скрипт отката:

$log = Import-Csv -Path "rename_log.csv"

foreach ($entry in $log | Where-Object { $_.Status -eq "Success" }) {

if (Test-Path -Path $entry.NewPath) {

Rename-Item -Path $entry.NewPath -NewName (Split-Path $entry.OldPath -Leaf) -Force

}

}

Для надёжности:

  • Храните лог в отдельном месте (не в переименовываемой папке)
  • Перед откатом проверьте лог на наличие конфликтов
  • Сделайте новый бэкап перед откатом