2014-04-24 2 views
3

내 PowerShell 스크립트 : 내 두 번째 실행에PowerShell을 이름 변경 - 항목의 이름을 변경하지

PS C:\Temp> C:\Temp\RenameFolders.ps1 
C:\Temp\m1 -> C:\Temp\m1 [1] 

:이 얻을 내 첫 번째 실행에

$dst = 'C:\Temp' 

#Get all folders in $dst 
$folders = Get-ChildItem $dst | ?{ $_.PSIsContainer } 

foreach($folder in $folders) 
{ 
    $cnt = (Get-ChildItem -filter *.txt $folder | Measure-Object).Count 

    $base = ($folder.FullName -split " \[.*\]$")[0] 
    $newname = $("{0} [{1}]" -f $base,$cnt) 

    Write-Host $folder.FullName "->" $newname 

    Rename-Item $folder.FullName $newname 
} 

문제

나는 이것을 얻는다 :

PS C:\Temp> C:\Temp\RenameFolders.ps1 
C:\Temp\m1 [1] -> C:\Temp\m1 [0] 
Rename-Item : Cannot rename because item at 'C:\Temp\m1 [1]' does not exist. 
At C:\Temp\RenameFolders.ps1:15 char:5 
+  Rename-Item $folder.FullName $newname 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException 
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand 

나는 문제가 '['와 ']'인 것을 알고 있지만, 나는 왜 그런지 이해할 수 없다.

누군가 내가 그 이유를 설명 할 수 있습니까?

+0

이전과 이후의 폴더 구조는 어떻게됩니까? 정확히 무엇을 기대합니까? –

+0

내 예제에서 볼 수 있듯이 ... 시작 이름 : "C : \ Temp \ m1", 이름 바꾸기 후 : "C : \ Temp \ m1 [1]", 두 번째 실행 후 ...시작 이름 : "C : \ Temp \ m1 [1]", "C : \ Temp \ m1 [0]"으로 이름 바꾸기 <-이 단계는 실패합니다 – Wolfy

답변

13

당신이 당신의 이름을 변경 -LiteralPath 스위치를 추가 3+ PS를 실행하는 경우 :

Rename-Item -LiteralPath $folder.FullName $newname 

달리 Move-Item

Move-Item -LiteralPath $folder.FullName $newname 

PowerShell을 더에서 파일 이름에 대괄호를 좋아하지 않는다 사용 다음 post :

"blobbing"을 지원하기 위해 와일드 카드 문자 집합에 대괄호를 추가 할 때 V2와 관련된 문제입니다. get-help about_wildcards에서

:

Windows PowerShell은 다음과 같은 와일드 카드 문자를 지원합니다.

와일드 카드 설명 예 일치


  • 제로 일치 일치 또는 *의 A, AG, 애플 바나나 이상의 문자

    ? 일치 정확히? n은,에, RAN에 에서 하나 개의 문자

    []가 범위를 일치 지정된 위치가 [알]을 OOK 책은, 요리사, 모습

    [] 일치가 지정한 문자의 했다 [ BC] OOK 책, 요리 후크 문자

[

] 특수 문자입니다.

+0

정말 고마워요! '-LiteralPath'는 완벽하게 작동했습니다. 왜? – CodyBugstein

+0

위의 문서를 참조하십시오 :'... 이것은 "blobbing"을 지원하기 위해 와일드 카드 문자 세트에 대괄호를 추가했을 때 V2에서 문제가되었습니다. – Raf

관련 문제