Вот что я придумал для этой проблемы:
$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
, будут проблемы с этой работой.Поэтому мне нужно знать, если это условие.