Переименовать папки, соответствующие шаблону, используя цикл foreach - PullRequest
0 голосов
/ 04 сентября 2018

Я создаю простой скрипт Powershell, который рекурсивно зацикливает каталог и удаляет префикс «Мой» из определенных папок, но, похоже, я не могу заставить это работать. Я могу перечислить каталоги просто отлично, но 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

1 Ответ

0 голосов
/ 04 сентября 2018

Write-Host правильно выводит имя папки $homeFolder

Вы должны использовать ту же переменную в команде rename-item вместо $_

Rename-Item $homeFolder -NewName $homeFolder.Name.Replace('My ', '')

Однако это будет работать, только если ваш текущий рабочий каталог совпадает с расположением папок, которые вы хотите переименовать. В противном случае используйте

Rename-Item $homeFolder.FullName -NewName $homeFolder.Name.Replace('My ', '')
...