Переименуйте файлы с помощью Powershell, имя файла уже существует - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь переименовать пакетные файлы в нескольких папках, удалив - .extension

Примеры файлов:

  • test file 1 - 1234.docx
  • testфайл 1 - 4321.docx
  • тестовый файл 1 - 6789.docx

Для этого я запускаю следующий скрипт:

Get-ChildItem -recurse -exclude <em>.dxl | foreach { Rename-Item -Path $_.FullName -NewName (($_.BaseName -replace '(.</em>)-.*?$','$1') + $_.Extension) }

Это даст мне следующую ошибку:

"Rename-Item: невозможно создать файл, когда этот файл уже существует."

Как мне от этого избавитьсядобавив (1), (2), (3), если файл уже существует после переименования?

1 Ответ

0 голосов
/ 28 февраля 2019

Вот что я придумал для этой проблемы:

$FileTracker = @{}
$files = (Get-ChildItem  -recurse -exclude "*.dxl" -file | sort fullname).fullname
$files | foreach {
    $Base = (($_ | select-string -pattern "(.*)-.*?$").matches.groups[1].value).Trim()
    if ($FileTracker[$Base]) {
        Rename-Item -path $_ -newName ((split-Path $Base -Leaf),"($($FileTracker[$Base]))",($_ -replace ".*(\..*?)$",'$1') -join "")
        $FileTracker[$Base]++
    }
    else {
        $FileTracker.add($Base,1)
        Rename-Item -path $_ -newName ((split-path $Base -Leaf),($_ -replace ".*(\..*?)$",'$1') -join "")
    }

}

Имейте в виду, что это решение делает файлы уникальными в соответствующих каталогах.Если он видит test file 1 - 23.txt в двух разных каталогах, он переименует их в test file 1.txt.Если у вас уже есть файлы, которые были переименованы как testfile 1(1).txt и testfile 1(2).txt, будут проблемы с этой работой.Поэтому мне нужно знать, если это условие.

...