Powershell을 사용하여 파일 이름을 재귀적으로 변경하는 중
나는 현재 내가 있는 폴더에 파일 이름을 일괄 변경할 줄을 가지고 있습니다.
dir | foreach { move-item -literal $_ $_.name.replace(".mkv.mp4",".mp4") }
이 코드는 현재 내가 어떤 디렉토리에 있든 완벽하게 작동하지만, 내가 원하는 것은 11개의 하위 폴더가 포함된 상위 폴더에서 스크립트를 실행하는 것입니다.각 폴더를 개별적으로 탐색하여 작업을 수행할 수 있지만, 스크립트를 한 번 실행하여 완료하고 싶습니다.
나는 다음을 시도했습니다.
get-childitem -recurse | foreach { move-item -literal $_ $_.name.replace(".mkv.mp4",".mp4") }
누가 여기 있는 올바른 방향을 가르쳐 줄 수 있습니까?저는 파워셸에 대해 잘 알지 못하지만, 이 경우에는 제 요구에 맞았습니다.
가까이 있었군요.
Get-ChildItem -File -Recurse | % { Rename-Item -Path $_.PSPath -NewName $_.Name.replace(".mkv.mp4",".mp4")}
정확히 이 시나리오를 위해 설계된 잘 알려지지 않은 기능이 있습니다.간단히 말하면 다음과 같은 작업을 수행할 수 있습니다.
Get-ChildItem -Recurse -Include *.ps1 | Rename-Item -NewName { $_.Name.replace(".ps1",".ps1.bak") }
그러면 매개 변수 NewName에 대한 스크립트 블록을 전달하여 ForEach-Object를 사용하지 않습니다.PowerShell은 파이핑되는 각 개체에 대한 스크립트 블록을 평가할 수 있을 정도로 똑똑하며, ForEach-Object에서와 마찬가지로 $_을 설정합니다.
다음과 같은 오류가 여전히 발생하는 경우 주의하십시오.Cannot rename because item at '...' does not exist.
, 일부 초장대 경로 및/또는 대괄호 같은 'specially interpre' 문자를 사용하는 경로를 사용할 수 있습니다.[
]
).
이러한 시나리오의 경우 다음을 사용합니다.-LiteralPath
/-PSPath
특수 접두어와 함께\\?\
(UNC 경로의 경우 접두사를 사용합니다.\\?\UNC\
최대 32k 문자의 경로에 대해 설명합니다.또한 조기 필터링을 제안합니다.Get-ChildItem
성능 향상을 위해 제공(적음)Rename-Item
전화가 더 좋습니다.
$path = 'C:\Users\Richard\Downloads\[Long Path] THE PATH TO HAPPINESS (NOT CLICKBAIT)\...etc., etc.'
# -s is an alias for -Recurse
# -File for files only
# gci, dir, and ls are all aliases for Get-ChildItem
# Note that among the 3, only `gci` is ReadOnly.
gci -s -PSPath $path -File -Filter "*.mkv.mp4" |
# ren, rni are both aliases for Rename-Item
# Note that among the 2, only `rni` is ReadOnly.
# -wi is for -WhatIf (a dry run basically). Remove this to actually do stuff.
# I used -replace for regex (for excluding those super rare cases)
rni -wi -PSPath { "\\?\$($_.FullName)" } -NewName { $_.Name -replace '\.mkv(?=\.mp4$)','' }
언급URL : https://stackoverflow.com/questions/21611551/recursively-renaming-files-with-powershell
'programing' 카테고리의 다른 글
복합 곱셈 감소를 위한 휴대용 심드 코드 작성 방법 (0) | 2023.10.21 |
---|---|
워드프레스용 IIS7에서 URL 다시쓰기 (0) | 2023.10.21 |
항상 jQuery Ajax에 대한 게시 데이터에서 JSON.stringify를 호출합니다. (0) | 2023.10.21 |
ORDER 2개의 옵션 중에서 낮은 숫자를 선택하지 않음으로써 (0) | 2023.10.21 |
OLTP 및 OLAP란 무엇입니까?그들의 차이점은 무엇입니까? (0) | 2023.10.21 |