PowerShell에서 파일 이름을 대량으로 변경하려면 어떻게 해야 합니까?
다음 작업을 수행하려고 합니다.
Rename-Item c:\misc\*.xml *.tmp
기본적으로 디렉토리 내의 모든 파일의 확장자를 다음으로 변경합니다..tmp
대신에.xml
PowerShell에서는 이를 위한 직접적인 방법을 찾을 수 없습니다.
의 도움말 문서에 있는 예 4부터 시작합니다.Rename-Item
다음 명령으로 검색:
get-help Rename-Item -examples
예:
Get-ChildItem *.txt| Rename-Item -NewName { $_.Name -replace '\.txt','.log' }
대체 명령에서 대체할 텍스트를 찾기 위해 정규식을 사용하기 때문에 대체 명령의 이스케이프 백슬래시에 대한 도움말 문서의 설명을 참고하십시오.
정규식을 보장하기 위해-replace
연산자가 문자열 끝에 있는 확장자만 일치하며, 정규식 문자열 끝 문자를 포함합니다.$
.
Get-ChildItem *.txt | Rename-Item -NewName { $_.Name -replace '\.txt$','.log' }
이것은 @Ohad Schneider가 댓글에 언급한 사건을 처리합니다. 우리는 이름이 붙은 파일을 가지고 있을 수 있습니다.lorem.txt.txt
그리고 우리는 끝내길 원합니다.lorem.txt.log
보다는lorem.log.log
.
정규식이 충분히 엄격하게 대상화되고 @etoxin의 답변에 영감을 받았으므로 다음과 같이 명령을 더 유용하게 사용할 수 있습니다.
Get-ChildItem | Rename-Item -NewName { $_.Name -replace '\.txt$','.log' }
즉, 파이프 이후에 정규식이 충분히 필터링되면 파이프 앞에서 필터링할 필요가 없습니다.또한 명령 문자열을 변경할 필요가 없습니다(예: 위의 명령을 복사하여 '.xml' 파일의 확장자를 변경하는 데 사용하려는 경우).
이것은 원하는 디렉터리에 있을 때도 잘 작동합니다.
Dir | Rename-Item –NewName { $_.name –replace "old","new" }
기존 답변은 다음과 같습니다.-replace
연산자, 하지만 파일이 호출되면 어떻게 합니까?a.xml.xml
둘 다.xml
서브스트링이 교체되고 최종 결과는a.tmp.tmp
다행히도, 있습니다.이에 대한 NET 방법:
Dir *.xml | rename-item -newname { [io.path]::ChangeExtension($_.name, ".tmp") }
(Manish Kumar와 친했습니다.GetFileNameWithoutExtension
하지만 이것이 더 우아하고 아마도 조금 더 효율적일 것입니다. 이 경우에 지나치게 중요한 것은 아닙니다.
여기에 작동할 또 다른 변형이 있습니다.
dir *.xml | Rename-Item -NewName {$_.BaseName + ".tmp"}
$_.BaseName
(마지막) 확장자 없이 "기본" 이름을 수행합니다.
별칭을 사용하는 단축 버전은 다음과 같습니다.
ls *.xml | ren -new {$_.BaseName + ".tmp"}
dir -Recurse | where-object -FilterScript {$_.Extension -eq ".xml"} | Rename-Item -NewName {[System.IO.Path]::GetFileNameWithoutExtension($_.fullname) + ".tmp"}
-WhatIf를 사용하여 먼저 결과를 평가합니다.
훨씬 더 쉽습니다. 검색 문자열 바꾸기는 정규식입니다.
dir *.xml | rename-item -newname {$_.name -replace "xml$","tmp"}
"$"는 문자열 끝을 나타내므로 "xml" 문자는 파일 이름의 마지막 세 문자여야 합니다.
이것은 효과가 있는 것처럼 보이며 단순한 것이 복잡한 것보다 낫습니다. (https://www.python.org/dev/peps/pep-0020/) 방법 (일단 디렉토리에 들어가면):
$files = Get-ChildItem -file -Filter *.xml;
ForEach ($file in $files)
{
$n = $file.Basename
Copy-Item -Path $file -Destination "$n.tmp"
Remove-Item "$n.xml"
}
언급URL : https://stackoverflow.com/questions/13382638/how-can-i-bulk-rename-files-in-powershell
'sourcecode' 카테고리의 다른 글
PHP로 디렉토리를 쓸 수 있는지 확인하려면 어떻게 해야 합니까? (0) | 2023.08.22 |
---|---|
로컬 DB 서버에 연결하는 중 오류 발생 (0) | 2023.08.22 |
jQuery: 요소의 클래스와 ID를 동시에 선택하시겠습니까? (0) | 2023.08.22 |
숫자를 정렬된 숫자 배열에 삽입하는 효율적인 방법은 무엇입니까? (0) | 2023.08.22 |
DESC 순서에 따라 그룹화하는 방법 (0) | 2023.08.22 |