Якщо ви хочете створити таблицю з поточними та новими назвами файлів і підготувати нові назви в іншій програмі, ви можете виконати наступні кроки:
Експорт поточних назв файлів до 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."
}
Додаткові кроки
- Перевірка CSV-файлу: Відкрийте файл
file_list.csv
у редакторі (наприклад, в Excel) і переконайтеся, що колонкаNewName
заповнена новими іменами файлів. - Забезпечення правильних значень: Переконайтеся, що всі рядки в колонках
CurrentName
таNewName
мають правильні значення. Наприклад:
CurrentName,NewName
image1.jpg,new_image1.jpg
image2.png,new_image2.png
Діагностика
- Перевірка імен файлів: Переконайтеся, що файли з іменами, вказаними в колонці
CurrentName
, дійсно існують у зазначеній директорії. - Перевірка логіки: Додайте додатковий діагностичний вивід для перевірки значень
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)"
}
}