Зміна назв зображень у папці за допомогою PowerShell

Якщо ви хочете створити таблицю з поточними та новими назвами файлів і підготувати нові назви в іншій програмі, ви можете виконати наступні кроки:

Експорт поточних назв файлів до CSV-файлу: Створіть CSV-файл з двома колонками: “CurrentName” і “NewName”. Спочатку “NewName” буде порожньою, і ви зможете заповнити її в іншій програмі (наприклад, в Excel).

Імпорт оновленого CSV-файлу та перейменування файлів: Після того, як ви заповнили колонку “NewName” в іншій програмі, імпортуйте цей CSV-файл назад у PowerShell і виконайте перейменування файлів.

Крок 1: Створення CSV-файлу з поточними назвами файлів

# Вказуємо шлях до головної папки
$mainFolder = "C:\Users\ваша_папка"

# Переконуємося, що папка існує
if (Test-Path $mainFolder) {
# Отримання всіх файлів з розширеннями зображень у головній папці та підпапках
$files = Get-ChildItem -Path $mainFolder -Recurse -File -Include *.jpg, *.png, *.jpeg

# Створюємо масив з назвами файлів
$fileList = @()
foreach ($file in $files) {
$fileList += [PSCustomObject]@{
CurrentName = $file.Name
NewName = ""
}
}

# Експортуємо масив до CSV-файлу
$fileList | Export-Csv -Path "$mainFolder\file_list.csv" -NoTypeInformation -Encoding UTF8
Write-Output "CSV file with current file names has been created at $mainFolder\file_list.csv"
} else {
Write-Error "Path $mainFolder does not exist."
}

Крок 2: Імпорт оновленого CSV-файлу та перейменування файлів

# Вказуємо шлях до головної папки
$mainFolder = "C:\Users\ваша_папка"

# Вказуємо шлях до CSV-файлу
$csvPath = "$mainFolder\file_list.csv"

# Переконуємося, що папка і CSV-файл існують
if (Test-Path $mainFolder) {
if (Test-Path $csvPath) {
# Імпортуємо CSV-файл
$fileList = Import-Csv -Path $csvPath -Encoding UTF8

foreach ($file in $fileList) {
$currentPath = Join-Path -Path $mainFolder -ChildPath $file.CurrentName
$newPath = Join-Path -Path $mainFolder -ChildPath $file.NewName
Write-Output "Processing: CurrentPath=$currentPath, NewPath=$newPath" # Діагностичний вивід
if ($file.NewName -and (Test-Path $currentPath)) {
try {
Rename-Item -Path $currentPath -NewName $newPath -Force
Write-Output "Renamed $($file.CurrentName) to $($file.NewName)"
} catch {
Write-Error "Could not rename file: $currentPath"
}
} else {
Write-Output "No new name provided or original file does not exist for $($file.CurrentName)"
}
}
} else {
Write-Error "CSV file $csvPath does not exist."
}
} else {
Write-Error "Path $mainFolder does not exist."
}

Додаткові кроки

  1. Перевірка CSV-файлу: Відкрийте файл file_list.csv у редакторі (наприклад, в Excel) і переконайтеся, що колонка NewName заповнена новими іменами файлів.
  2. Забезпечення правильних значень: Переконайтеся, що всі рядки в колонках CurrentName та NewName мають правильні значення. Наприклад:

CurrentName,NewName
image1.jpg,new_image1.jpg
image2.png,new_image2.png

Діагностика

  1. Перевірка імен файлів: Переконайтеся, що файли з іменами, вказаними в колонці CurrentName, дійсно існують у зазначеній директорії.
  2. Перевірка логіки: Додайте додатковий діагностичний вивід для перевірки значень CurrentName та NewName:
foreach ($file in $fileList) {
Write-Output "CurrentName: $($file.CurrentName), NewName: $($file.NewName)" # Діагностичний вивід
$currentPath = Join-Path -Path $mainFolder -ChildPath $file.CurrentName
$newPath = Join-Path -Path $mainFolder -ChildPath $file.NewName
Write-Output "Processing: CurrentPath=$currentPath, NewPath=$newPath" # Діагностичний вивід
if ($file.NewName -and (Test-Path $currentPath)) {
try {
Rename-Item -Path $currentPath -NewName $newPath -Force
Write-Output "Renamed $($file.CurrentName) to $($file.NewName)"
} catch {
Write-Error "Could not rename file: $currentPath"
}
} else {
Write-Output "No new name provided or original file does not exist for $($file.CurrentName)"
}
}