하여 오류의 원인은 전체 경로에 & 문자, 심지어 부모 폴더를 대체 할 것입니다.
예를 들어 c:\me & my\something & another
$ _. FullName.Replace ("&", "and") 폴더의 이름을 c:\me and my\something and another
으로 변경한다고 가정 해보십시오. 그러나이 작은 테스트 시나리오에서 부모 폴더 이전에 하위 폴더의 이름을 변경 했으므로 의 자식이되는 폴더는 c:\my & my
의 자식이되고 c:\me and my
의 자식이됩니다 (그 위에 우리는 그것을 이동하려고합니다 폴더에있는 존재하지 않는
(나는 Get-Help Rename-Item -Parameter NewName
을 실행하여 가지고) Rename-Item
의 도움말 섹션에서 :.
Specifies the new name of the item. Enter only a name, not a path and name. If you enter a path that is different
from the path that is specified in the Path parameter, Rename-Item generates an error. To rename and move an item,
use the Move-Item cmdlet.
그래서 우리는 단지 NewName
매개 변수에 폴더의 이름을 포함 할 .
마지막으로 @andyb가 지적했듯이 부모 경로가 그대로 유지되도록 항목의 이름을 하위 폴더, 부모 폴더 순으로 바꿔야합니다. @ andyb가 제안한 폴더 정렬 방법은 FullName
경로의 길이로 정렬하는 것이 좋습니다.
따라서 다음은 매우 잘 작동합니다.
Get-ChildItem .\ -Recurse -Filter "*&*" |
Where { $_.PSIsContainer } |
Sort { $_.FullName.Length } -Descending |
Foreach {
$newName = $_.Name.Replace("&", "and")
Rename-Item $_.FullName $newName
}
편집 : 때문에 지적 @andyb misstake에, 폴더 경로 길이의 내림차순으로 정렬을 포함하도록 업데이트되었습니다.
어떤 방법으로 당신의 시도가 성공하지 않는 이유는 무엇입니까? 당신이 얻은 오류는 무엇이며 오류를 해결하기 위해 무엇을 시도 했습니까? 또한, 어떤 PowerShell 버전을 사용하고 있습니까? –
편집을 참조하십시오. 감사! – shenn