2014-10-30 2 views
2

약 200,000 개의 파일을 OneDrive로 이동하여 좋아하지 않는 문자가 몇 개 발견되었습니다. 가장 큰 범죄자는 #입니다. 나는 해시가있는 약 3,000 개의 파일을 갖고 있으며, 모두 No.으로 바꾸고 싶습니다. 예를 들어, 기존 : File#3.txt 새로운 : File No.3.txtWindows의 하위 폴더에서 #에있는 모든 파일 이름 바꾸기

내가 PowerShell 스크립트를 사용하여 시도하지만 #을 좋아하지 않는 중 하나

Get-ChildItem -Filter "*#*" -Recurse | 
    Rename-Item -NewName { $_.name -replace '#',' No. ' } 

나는 구문을 알아내는 많은 행운을 가지고 있지 않다 예약 문자 - 시도했는데 \#, #\, '*#*', 행운을 빕니다.

누구든지 이에 대해 조명을 표시하거나 이러한 해시 태그를 모두 재귀 적으로 바꾸는 빠른 방법을 제공 할 수 있습니까?

감사합니다.

Get-ChildItem -Filter "*`#*" -Recurse | 
Rename-Item -NewName {$_.name -replace '#','No.' } -Verbose 

또는

Get-ChildItem -Filter "*$([char]35)*" -Recurse | 
Rename-Item -NewName {$_.name -replace "$([char]35)","No." } -Verbose 

모두 작동합니다

+0

태그 또는 제목으로 작업하는 환경을 지정하면 더 많은 답변을 얻을 수 있습니다. – 4rlekin

답변

4
Mode    LastWriteTime  Length Name  
----    -------------  ------ ----  
-a---  30.10.2014  14:58   0 file#1.txt 
-a---  30.10.2014  14:58   0 file#2.txt 

는 PowerShell은 내용을 평가하는 이스케이프 문자로 백틱 (`), 큰 따옴표를 사용합니다.

Get-ChildItem -Filter '*#*' -Recurse | 
Rename-Item -NewName {$_.name -replace '#', 'No.'} -Verbose 

VERBOSE: Performing the operation "Rename File" on target 
"Item: D:\tmp\file#1.txt Destination: D:\tmp\fileNo.1.txt". 
VERBOSE: Performing the operation "Rename File" on target 
"Item: D:\tmp\file#2.txt Destination: D:\tmp\fileNo.2.txt". 

PowerShell을 파서 당신의 의도를 알아낼만큼 똑똑하기 때문에

Get-ChildItem -Filter "*`#*" -Recurse | 
      Rename-Item -NewName {$_.name -replace "`#","No." } -Verbose 

VERBOSE: Performing the operation "Rename File" on target 
"Item: D:\tmp\file#1.txt Destination: D:\tmp\fileNo.1.txt". 
VERBOSE: Performing the operation "Rename File" on target 
"Item: D:\tmp\file#2.txt Destination: D:\tmp\fileNo.2.txt". 

이것은 또한 작동합니다.

+0

문자열의 변수 확장을 더 깊이 파고 들려면 Jeffrey Snover의 환상적인 게시물입니다. Http://blogs.msdn.com/b/powershell/archive/2006/07/15/variable-expansion-in-strings-and-herestrings.aspx – evilSnobu

+0

완벽하게 작동합니다 ... 훌륭합니다. 한 캐릭터가 어떤 차이를 만들 수 있는지. 고맙습니다 –

관련 문제