소스 파일 구조를 유지하면서 exe 매개 변수를 통해 png를 처리하기위한 Powershell 스크립트


0

현재 수만 개의 png 파일 크기를 조정해야하는 개인 프로젝트를 진행하고 있습니다. 나는 스크립팅, PS 또는 프로그래밍에 대해 거의 아무것도 모른다 (나는 그래픽 아티스트이다)

이미지 크기를 조정하는 ImageResizer 라는 소프트웨어를 사용하고 있습니다.

이 소프트웨어에는 명령 줄 매개 변수가 있습니다. 내가 사용하는 매개 변수는 다음과 같습니다

/resize auto "XBR 2x <NoBlend>"

내 이미지를 가져 와서 xBRx2 알고리즘을 사용하여 크기를 두 배로 늘립니다. 필요한 것은이 출력입니다.

사실, 소프트웨어의 Github에서 가져온 배치 파일이 있는데, 필요한 작업을 정확히 수행하지만 단일 이미지에 대해서만 수행합니다. 이것은 참조 용입니다.

@echo off 
for %%F in (Input*.*) do ImageResizer-r129.exe /load "%%F" /resize auto "XBR 2x <NoBlend>" /save "Output\%%~nF%%~xF"

여기 내 딜레마가 있습니다. 내가 언급했듯이 나는 수만 개의 이미지를 가지고 있습니다. 그리고 당신은 "글쎄, cmd는 그렇게 할 수있다"고 생각할지도 모른다

제외하고,이 pngs는 다소 광범위한 하위 디렉토리 레이아웃에 중첩되어 있습니다 ... 내 출력 폴더는 필요한 것과 작동하기 위해 입력과 동일한 하위 디렉토리 레이아웃을 유지해야합니다.

그래서 내가 더 필요한 것을 설명하기 위해 ...

INPUT 폴더가 있습니다. 이 폴더에는 여러 개의 하위 폴더가 있습니다. 그리고 각 폴더에는 더 많은 폴더가 있습니다. 얼마나 멀리 가고 있으며 폴더 이름이 다릅니다. 결국, 각 '지점'의 끝에는 내 소프트웨어가 처리해야하는 내 png가 있습니다.

따라서 입력 폴더는 다음과 같습니다.

L 입력
L_ 치즐
L__ 텍스처
L___ 항목
L____ one.png
L____ two.png
L___ 모델
L____ one.png
L____ two.png
L_ 아티팩트
L__ 텍스처
L___ 항목
L____ groupOne
L_____ one.png
L_____ two.png
L____ groupTwo

내 예에서 알 수 있듯이 균일 한 명명 구조가 없으며 스크립팅에 대해 아는 바가 거의 없으므로 모든 PNG를 가져 오기 위해 재귀 스위치가 필요합니다.

이 입력 폴더의 모든 PNG는 내 매개 변수와 함께 ImageResizer.exe를 통과해야합니다.

그런 다음 처리 된 PNG는 SAME 하위 디렉토리 레이아웃을 입력으로하여 출력 폴더로 출력해야합니다.
따라서 Input / chisel / textures / items / one.png 는 / save to Output / chisel / textures / items / one으로 저장해야합니다. 입력 폴더의 모든 png에 대해 .png 등이 있습니다.

또는 스크립트가 입력 폴더에서 원본 이미지를 덮어 쓸 수 있습니다. 어느 쪽이든 같은 목표를 달성합니다.

내 현재 작성했던 PS 스크립트는 다음과 같습니다. http://pastebin.com/fveGJkRJ

이렇게 처리해야하는 약 18,000 개의 png가 있으므로 도움을 주셔서 감사합니다. 배치 스크립트를 반복해서 복사하여 붙여 넣기 시작하여 각 입력 및 출력을 각 파일 경로로 바꾸었지만 너무 많은 시간을 소비했습니다.


죄송합니다. Powershell을 도와 드릴 수는 없지만 * nix ' "find"명령과 동등한 작업을 찾아보십시오.
Glenn Randers-Pehrson

답변:


0

다음은 원하는 것을 수행하는 powershell 스크립트입니다.
args 및 따옴표 사용에 문제가 있으므로 ImageResizer-r129.exe에 대한 모든 인수가 포함 된 필요한 폴더와 배치 파일이 생성되므로 별도로 실행해야합니다.

$ImgRes= "ImageResizer-r129.exe"
$Input = "G:\Rebirth Gaming\ImageResizer\input\"
$output= "G:\Rebirth Gaming\ImageResizer\Output\"

$Len = $Input.Length

Set-Location $Input

Get-ChildItem *.png -file -recurse|
  ForEach {
    $OutPath = $Output+$($_.DirectoryName.Substring($Len))
    If (!(Test-Path $OutPath)) {MkDir $OutPath}
    "$ImgRes /load `"$_`" /resize auto `"XBR 2x <NoBlend>`" /save `"$OutPath\$($_.Name)`" "
} | Out-File $($Output+"Resize.cmd")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.