소스 파일 구조를 유지하면서 exe 매개 변수를 통해 png를 처리하기위한 Powershell 스크립트 가지고 있습니다. 그리고

현재 수만 개의 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 스크립트입니다.
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")


답변