Вот альтернативный способ сделать то же самое.
Get-ChildItem -Recurse -file | Group-Object Name | foreach-object {
$script:i = 1
$_.Group | Select-Object -Skip 1 |
Rename-Item -newname { "{0}-{1}{2}" -f $_.basename, $script:i++, $_.extension }
}
Group-Object
дает нам все файлы с одинаковыми именами, и для каждой группы имен первый файл пропускается, а остальные переименовываются.
Он также использует функцию, которая была разработана специально для этого варианта использования, что -NewName
может принимать блок сценариев в качестве параметра. Сценарий будет вызываться для каждого элемента конвейера, а результат будет передан Rename-Item
как новое имя.