0

나는 powershell 스크립트를 통해 파일 이름에서 여러 특수 문자를 제거 할 방법을 찾고 있습니다.Powershell 파일 이름에서 특수 문자 제거

내 파일 이름은 다음과 같이 :

[리포트] _first_day_of_month_01_ (generated_by_powershell) _ [repnbr1] 내가 제거를 통해 수수께끼 된

이 .txt []와 그들 사이의 모든의() 모든 것을 그와 제거 사이의 모든 _ 원하는 결과는 다음과 같습니다 파일 이름 인 상태뿐만 아니라입니다 :

는 지금까지 내가 아무 소용 아래의 솔루션을 시도 01.txt 월

첫날 . 파일이있는 디렉토리에서 이들 각각을 실행했습니다. 나는이 작업을 수행하려고 방식에 내재 된 결함이 있다고 가정

Get-ChildItem -Path .\ -Filter *.mkv | %{ 
$Name = $_.Name 
$NewName = $Name -Replace "(\s*)\(.*\)",'' 
Rename-Item -Path $_ -NewName $NewName 
} 

: 그것은 내가 시도 할 경우에도 작동이 같은 시간에 하나의 설정을하지 않기 때문에

Get-ChildItem -Path .\ -Filter *.mkv | %{ 
$Name = $_.Name 
$NewName = $Name -Replace "(\s*)\(.*\)",'' 
$NewName2 = $NewName -Replace "[\s*]\[.*\]",'' 
$NewName3 = $NewName2 -Replace "_",' ' 
Rename-Item -Path $_ -NewName $NewName3 
} 

. 즉, 이동 항목 솔루션을 사용하는 대신 Rename-Item cmdlet을 사용하는 것이 좋습니다.

답변

1
gci *.txt | Rename-Item -NewName {$_ -replace '_*(\[.*?\]|\(.*?\))_*' -replace '_+', ' '} 

이름 바꾸기는 [text] 또는 (text) 블록을 일치하고 아무것도로 대체 정규식입니다. 괄호와 괄호는 정규 표현식에서 이스케이프 처리하여 문자 그대로 일치시켜야합니다. 선택적인 선행 또는 후미 밑줄과 일치시켜 [Report]_ 또는 _[repnbr1]을 얻습니다. 그 이유는 이름의 시작 또는 끝에 _이 남기 때문에 선행/후행 공백이되어 성가 시게됩니다. 그런 다음 나머지 밑줄을 공백으로 대체합니다.

여기에서 작동하는 정규 표현식을 참조하십시오. Regex101

+0

감사합니다. 제한된 성공을 거두어 이와 비슷한 솔루션을 시도했지만 이것이 트릭을 100 % 만들었습니다 !! 고맙습니다! – GreatMagusKyros