Несколько частичных переименований файлов из CSV с помощью Powershell - PullRequest
0 голосов
/ 09 июля 2020

У меня есть папка с исходными изображениями (.jpg), которую я хотел бы переименовать на основе данных в .csv.

Переименование будет в двух частях имени файла, имен файлов выглядит как part1.part2.jpg

Вот как .csv выглядит:

введите описание изображения здесь

У меня есть частично работающий скрипт, но он выдает ошибки, говоря, что не может найти исходные файлы и всегда не может правильно переименовать последний файл, указанный в .csv.

#read the csv doc provided to get the old Part1s
$csvData = Import-Csv '.\*.csv'

#get the source images
$sourceImages = GCI '.\Source_Images' -Recurse

#rename source file
$csvData | % {
$oldPart1 = $_.OldPart1
$newPart1 = $_.NewPart1
$oldPart2 = $_.OldPart2
$newPart2 = $_.NewPart2
    foreach($sourceImage in $sourceImages){
        $sourceImage | Rename-Item -NewName { $_.Name -replace $oldPart1, $newPart1 -replace $oldPart2, $newPart2}   
    }
}

Я могу сказать, что я близок, но мне явно чего-то не хватает. Я думаю, что foreach в % вызывает некоторую проблему.

1 Ответ

2 голосов
/ 09 июля 2020

Если мы придерживаемся вашего текущего logi c, вам просто нужно перечитать каталог при обновлении переменных. Это необходимо, потому что после переименования файлов на каждой итерации l oop они становятся разными объектами и больше не могут быть найдены в исходном $sourceImages.

$csvData = Import-Csv '.\*.csv'

#rename source file
$csvData | % {
    $oldPart1 = $_.OldPart1
    $newPart1 = $_.NewPart1
    $oldPart2 = $_.OldPart2
    $newPart2 = $_.NewPart2
    #get the source images
    $sourceImages = GCI '.\Source_Images' -Recurse
    foreach($sourceImage in $sourceImages){
        $sourceImage | Rename-Item -NewName { $_.Name -replace $oldPart1, $newPart1 -replace $oldPart2, $newPart2}   
    }
}
...