使用ツール:ImageMagick, 7za(7zipのコマンドラインツール)
Windowsのバッチで、PNGのZIPファイルを解凍、JPEGに変換してからZIPファイルにする。1つのzipファイルの変換しかできない。
ImageMagickでサブフォルダに出力する方法が分からない(うまく行かない)ので、jpegファイルをバッチファイルのあるフォルダに作成→出力用フォルダを作成→moveコマンドでjpegファイルを出力用フォルダに移動、という面倒なことをやっている。
ImageMagickの出力指定で3桁の数字をファイル名にするため、 %%03d.jpg
としているのだが、 %03d.jpg
ではなく、 %%
としないと認識してくれない(シェル展開? エスケープ?)。ネットちょろっと調べたけどこんな風に書いてるのはどこにもなかったけどこうしないと動かない。なぜだ。
7zaはパス通してないので、c:\programpath\7za.exe
と直接指定して起動している。
ファイル名に「&」含むとエラーになる。他にも「\」とかダメそう。
そもそも何でこんなことするかといえば、iPadでスクショ撮ってzip化したファイルがたくさんあったから。iPadOSのzipファイルって7zaで解凍すると、ファイル名の頭に「.」のついたファイルが生成されちゃう。これを除くために、magickの入力ファイル指定で「IMG_*.png
」と指定している。
結果、掛け算分からなくて足し算使ってるみたいなことになった。
@echo off
cd /d "%~dp0"
set inputpath=%~dp0src\
set inputfile=%~dpnx1
set outpath=%~dp0%~n1
c:\programpath\7za\7za.exe e -o"%inputpath%" "%inputfile%" >nul
magick %inputpath%IMG_*.png -quality 85 %%03d.jpg
mkdir "%outpath%"
move "%~dp0*.jpg" "%outpath%" >nul
c:\programpath\7za\7za.exe a "%outpath%_JPEG.zip" "%outpath%\*.jpg"
rmdir "%inputpath%" /s /q
rmdir "%outpath%" /s /q
pause