Script Powershell para processar pngs via parâmetros exe enquanto mantém a estrutura do arquivo de origem

0

Atualmente, estou trabalhando em um projeto pessoal em que preciso redimensionar dezenas de milhares de arquivos png. Eu sei pouco ou nada sobre scripts, PS ou programação (sou um artista gráfico)

Estou usando um software chamado ImageResizer que redimensiona imagens.

Este software tem parâmetros de linha de comando. Os parâmetros que estou usando são:

/resize auto "XBR 2x <NoBlend>"

que pega minha imagem e usa um algoritmo xBRx2 para duplicar seu tamanho. É essa saída que eu preciso.

Na verdade, eu tenho um arquivo em lote que peguei no Github do software que faz exatamente o que eu preciso fazer, mas apenas para uma única imagem. É isto, para referência:

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

Aqui está meu dilema. Eu tenho, como mencionei, dezenas de milhares dessas imagens. E você pode estar pensando "bem, que cmd pode fazer isso" ...

Exceto, esses pngs são aninhados em um layout de subdiretório bastante extenso ... e minha pasta de saída precisa manter esse mesmo layout de subdiretório como entrada para trabalhar para o que eu preciso.

Então, para explicar o que eu preciso mais claramente ...

Eu tenho uma pasta INPUT. Nesta pasta existem várias subpastas. E em cada uma dessas pastas há mais pastas ... até onde vão e os nomes dessas pastas variam. Eventualmente, no final de cada 'branch' são minhas pngs que eu preciso do meu software para processar.

Então, minha pasta de entrada parece um pouco assim:

L Input
L_ cinzel
L__ texturas
Itens de L

por Tim Burton 25.12.2016 / 04:23

1 resposta

0

Aqui está um script do powershell que faz o que você quer.
Como eu tenho um problema com o args e citando (e sem tempo) ele gera pastas necessárias e um arquivo de lote com todos os args para ImageResizer-r129.exe, você terá que executar separadamente.

$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")
    
por 25.12.2016 / 19:11