
이름을 바꿔야 하는 JPG가 수백 개 있습니다. 각 파일 이름의 기존 번호에 적용되는 다음과 같은 간단한 방정식이 필요합니다.
(x-290)*-1
"Vitrine Hinge.0.jpg"는 "Vitrine Hinge.290.jpg"가 되고, "Vitrine Hinge.1.jpg"는 "Vitrine Hinge.289.jpg"가 되는 식입니다.
나는 다음을 사용했습니다 :
디렉토리 *.jpg | ` foreach { $data = $_.name.Split(".") Rename-Item -NewName { '(' + $data1+ '-290)(-1)' } }
그리고 오류가 발생합니다.
답변1
Ryan의 대답은 새 파일 이름의 기본 이름을 하드 참조하지 않고도 작동하기 때문에 좋습니다.
저는 항상 어떤 이유로든 파일 이름을 바꾸고 있으며 powershell을 사용하여 문자열을 조작하는 창의적인 방법을 찾았습니다. 이를 수행하는 또 다른 방법은 다음과 같습니다.
gci *.jpg | Rename-Item -NewName {$_.basename -replace "$($_.basename.split(".")[-1])$","$(290-$_.basename.split(".")[-1])$($_.extension)"}
이 한 줄짜리 파일은 jpg, gif, txt 파일 등 다른 파일의 이름을 같은 방식으로 바꾸는 데 재사용할 수 있습니다. 유일한 요구 사항은 기본 이름의 마지막 부분이 ".#"으로 끝나야 한다는 것입니다.
그럼 여기서 무슨 일이 벌어지고 있는 걸까요? 분석을 위해 $_가 현재 "Vitrine Hinge.12.jpg" 파일에 대한 [System.IO.FileInfo] 개체라고 가정해 보겠습니다. 그러므로:
$_.기본 이름
[문자열] "Vitrine Hinge.12"와 같습니다.
$_.basename.split(".")
결과적으로 다음 항목이 포함된 배열이 생성됩니다.
Door Hinge
12
따라서 [1]은 "12"를 나타냅니다. 그러나 대신 다음을 사용했습니다.
$_.basename.split(".")[-1]
"Viterine Hinge.Chrome.12.jpg"라는 파일이 있었다면 "Chrome"을 참조했을 것이기 때문입니다. [-1]을 사용하면 배열의 마지막 항목이 제공되므로 내 파일 이름에 다른 마침표가 있어도 문제가 되지 않습니다.
좋습니다. 이제 이 시점에서는 이를 $()에 캡슐화하고 -replace 연산자에 in을 사용합니다. 문자열 끝에서 정규식 일치를 수행할 수 있도록 첫 번째 인수를 $로 끝냅니다. 이렇게 하면 내 파일 이름에 다른 숫자가 있어도 문제가 되지 않습니다. 예를 들어, "Viterine D00r Knob.0.jpg"는~ 아니다"Viterine D290290r Knob.290.jpg"로 이름이 변경되었습니다.
놓친 것이 있으면 알려주세요. 건배 :)
답변2
이와 같은 것이 작동해야합니다.
Get-ChildItem *.Jpg|%{$SplitName=$_.name -split '\.';$NewNumber= $(([int]$SplitName[1]-290)*-1);$NewName=@($SplitName[0],$NewNumber, $SplitName[2]) -join '.'; Rename-Item $_.name $Newname}
브로큰 아웃(Broken Out)이 될 것입니다.
$Files=Get-ChildItem *.jpg
Foreach ($File in $files){
$SplitName=$File.name -split '\.';
$NewNumber= $(([int]$SplitName[1]-290)*-1)
$NewName=@($SplitName[0],$NewNumber, $SplitName[2]) -join '.'
Rename-Item $_.name $Newname
}