Я создаю простой сценарий Powershell, который рекурсивно проходит через каталог и удаляет префикс «My» из определенных папок, но я не могу заставить его работать. Я могу просто перечислить каталоги, но Rename-Item не влияет.
Любая помощь будет очень признательна!
Clear-Host
pushd
$homeDrivesDir = 'E:\test\users'
$reportmode = $false
foreach($homeFolder in (Get-ChildItem -Recurse $homeDrivesDir | Where {$_.psIsContainer -eq $true} | Where-Object {($_.Name.contains("My Documents") -or $_.Name.contains("My Music") -or $_.Name.contains("My Pictures") -or $_.Name.contains("My Videos"))})){
if ($reportMode -eq $true) {
# reportmode is on, don't do anything
Write-Host "Directories To be Renamed" $homeFolder.Name -backgroundcolor red -foregroundcolor white
} else {
# reportmode is off, fix the permissions
Write-Host "Renaming Directories" $homeFolder.Name -foregroundcolor white -backgroundcolor red
try {
Write-Host $homeFolder
Rename-Item $_ -NewName $_.Name.Replace('My ', '')
} catch {
}
} #/if
} #/if
popd





Write-Host правильно выводит имя папки $homeFolder
Вы должны использовать ту же переменную в своей команде rename-item вместо $_
Rename-Item $homeFolder -NewName $homeFolder.Name.Replace('My ', '')
Однако это будет работать только в том случае, если ваш текущий рабочий каталог совпадает с местоположением папок, которые вы хотите переименовать. В противном случае используйте
Rename-Item $homeFolder.FullName -NewName $homeFolder.Name.Replace('My ', '')