@echo off
REM -----------------------------------------------------------------------------------------
REM 画像ファイルリサイズバッチ
REM -----------------------------------------------------------------------------------------
REM 概要:
REM 実行ファイルと同じディレクトリに存在する画像ファイルのサイズを
REM 縦横比を保持した状態で指定した高さまたは幅にリサイズします
REM 必須:
REM オープンソースソフトウェアの「ImageMagick」を利用します。
REM http://imagemagick.org/script/download.php
REM
REM -----------------------------------------------------------------------------------------
REM -------------------------------------------------
REM 変数
REM -------------------------------------------------
SETBATCHNAME=%~n0
SETYMD=%date:~-10,4%%date:~-5,2%%date:~-2,2%
SETLOGFILE=%BATCHNAME%_%YMD%.log
REM * =========================================================================================================
REM * 処理開始
REM * =========================================================================================================
:LA_STARTBATCH
cls
ECHO =========================================================================================
ECHO 画像ファイルリサイズバッチ
ECHO.
ECHO -----------------------------------------------------------------------------------------
ECHO 実行ファイルと同じディレクトリに存在する画像ファイルのサイズを
ECHO 縦横比を保持した状態で指定した高さまたは幅にリサイズします
ECHO.
ECHO ※指定サイズは縦長画像であれば高さ、横長画像であれば幅に適用されます
ECHO.
ECHO =========================================================================================
ECHO.
SETDIRPATH=%CD%
ECHO.
SET/pimode=モード選択([0]自動/[1]縦/[2]横/または[c]キャンセル)⇒
IF'%imode%'=='c'GOTOLA_ENDBATCH
IF'%imode%'==''GOTOLA_STARTBATCH
ECHO.
SET/pisize=新しいサイズを入力(または[c]キャンセル)⇒
IF'%isize%'=='c'GOTOLA_ENDBATCH
IF'%isize%'==''GOTOLA_STARTBATCH
REM 数値かどうかチェック
SET/Acheck=%isize%*1
IF%check%==0(
GOTOLA_INPUT_MISSING
)
ECHO.
SET/pseq=リサイズしたファイルに付与する接頭語を入力(または[c]キャンセル)⇒
IF'%seq%'=='c'GOTOLA_ENDBATCH
REM コマンドチェック
IF'%seq%'==''(
setlocalenabledelayedexpansion
SET/pconfirm=接頭語を入力しない場合、元ファイルが上書きされますがよろしいですか?[y/n]⇒
CALL:LA_INPUT_CHECK!confirm!yn
IF'%confirm%'=='n'GOTOLA_CANCELL
)
SETPREFIX=%seq%
CD%DIRPATH%
ECHO [%DATE% %TIME%] バッチ処理開始 > %LOGFILE%
ECHO. >> %LOGFILE%
ECHO %DIRPATH% >> %LOGFILE%
ECHO %DIRPATH%にあるファイルを、指定したサイズ(%isize%)にリサイズします。 >> %LOGFILE%
ECHO. >> %LOGFILE%
ECHO.
ECHO %DIRPATH%
ECHO 上記ディレクトリ内にあるファイルを指定したサイズ(%isize%)にリサイズします。
ECHO.
SET/pconfirm=よろしいですか?[y/n]⇒
CALL:LA_INPUT_CHECK%confirm%yn
IF'%confirm%'=='n'GOTOLA_CANCELL
ECHO.
ECHO スタート!
setlocalenabledelayedexpansion
SETCNT=0
FOR/R%%AIN(*)DO(
SETNM=%%~nA
IFNOT'%%~xA'=='.log'(
IFNOT'%%~nA'=='%BATCHNAME%'(
REM画像の縦幅を取得
FOR/f"usebackq tokens=*"%%iin(`magickidentify -format%%h%%A`)do@setHEIGHT=%%i
REM画像の横幅を取得
FOR/f"usebackq tokens=*"%%iin(`magickidentify -format%%w%%A`)do@setWIDTH=%%i
REM自動調整
IF'%imode%'=='0'(
REMリサイズ
SETMODE=
REMECHO 高さ:!HEIGHT!/幅:!WIDTH!/指定:!isize! >> %LOGFILE%
IF!HEIGHT!GEQ!WIDTH!(
REM縦幅>=横幅
IF!HEIGHT!GEQ!isize!(
REM縦幅>=指定サイズ
magickconvert -resizex!isize!%%A%%~dpA!PREFIX!%%~nxA
SETMODE=高さを調整
)else(
REM縦幅<指定サイズ(変換しない)
magickconvert -resizex!HEIGHT!%%A%%~dpA!PREFIX!%%~nxA
SETMODE=調整なし
)
)else(
REM縦幅<横幅
IF!WIDTH!GEQ!isize!(
REM横幅>=指定サイズ
magickconvert -resize!isize!x%%A%%~dpA!PREFIX!%%~nxA
SETMODE=幅を調整
)else(
REM横幅<指定サイズ(変換しない)
magickconvert -resize!WIDTH!x%%A%%~dpA!PREFIX!%%~nxA
SETMODE=調整なし
)
)
)
REM高さ調整
IF'%imode%'=='1'(
IF!HEIGHT!GEQ!isize!(
REM縦幅>=指定サイズ
magickconvert -resizex!isize!%%A%%~dpA!PREFIX!%%~nxA
SETMODE=高さを調整
)else(
REM縦幅<指定サイズ(変換しない)
magickconvert -resizex!HEIGHT!%%A%%~dpA!PREFIX!%%~nxA
SETMODE=調整なし
)
)
REM幅調整
IF'%imode%'=='2'(
IF!WIDTH!GEQ!isize!(
REM横幅>=指定サイズ
magickconvert -resize!isize!x%%A%%~dpA!PREFIX!%%~nxA
SETMODE=幅を調整
)else(
REM横幅<指定サイズ(変換しない)
magickconvert -resize!WIDTH!x%%A%%~dpA!PREFIX!%%~nxA
SETMODE=調整なし
)
)
REM変更後画像の縦幅を取得
FOR/f"usebackq tokens=*"%%iin(`magickidentify -format%%h%%~dpA!PREFIX!%%~nxA`)do@setNHEIGHT=%%i
REM変更後画像の横幅を取得
FOR/f"usebackq tokens=*"%%iin(`magickidentify -format%%w%%~dpA!PREFIX!%%~nxA`)do@setNWIDTH=%%i
REM出力を整形
IF!HEIGHT!GEQ1000(SETSHEIGHT=!HEIGHT!)ELSE(SETSHEIGHT=!HEIGHT!)
IF!WIDTH!GEQ1000(SETSWIDTH=!WIDTH!)ELSE(SETSWIDTH=!WIDTH!)
IF!NHEIGHT!GEQ1000(SETSNHEIGHT=!NHEIGHT!)ELSE(SETSNHEIGHT=!NHEIGHT!)
IF!NWIDTH!GEQ1000(SETSNWIDTH=!NWIDTH!)ELSE(SETSNWIDTH=!NWIDTH!)
ECHO !MODE!:[!SHEIGHT!x!SWIDTH!] → [!SNHEIGHT!x!SNWIDTH!] ファイル:%%~nxA
ECHO !MODE!:[!SHEIGHT!x!SWIDTH!] → [!SNHEIGHT!x!SNWIDTH!] ファイル:%%~nxA >> %LOGFILE%
)
)
)
ECHO コンプリート!
echo.
GOTOLA_ENDBATCH
EXIT/B
REM * =========================================================================================================
REM * コマンドチェック
REM * =========================================================================================================
:LA_INPUT_CHECK
ECHO %2 > tmp.text
SETRET=
FOR/F"usebackq"%%tIN(`findstr%1tmp.text`)DOSETRET=%%t
DELtmp.text
if'%RET%'==''(
GOTOLA_INPUT_MISSING
)
EXIT/b
REM * =========================================================================================================
REM * エラー処理
REM * =========================================================================================================
:LA_ERROR
echo.
echo エラーが発生しました。
echo.
gotoLA_ENDBATCH
REM * =========================================================================================================
REM * 処理中止
REM * =========================================================================================================
:LA_CANCELL
ECHO.
ECHO 処理は中止されました。
ECHO.
GOTOLA_ENDBATCH
REM * =========================================================================================================
REM * 入力ミス
REM * =========================================================================================================
:LA_INPUT_MISSING
ECHO.
SET/pmiss=入力に誤りがあります。
GOTOLA_STARTBATCH
REM * =========================================================================================================
REM * バッチ終了処理
REM * =========================================================================================================
:LA_ENDBATCH
ECHO. >> %LOGFILE%
ECHO [%DATE% %TIME%] バッチ処理終了 >> %LOGFILE%
ECHO.
SET/pend=終了するにはEnterキーを押してください...
EXIT
ディスカッション
コメント一覧
こんにちは。
地図タイル画像の大量のpngを一括でグレースケール化したいと考えておりようやくImageMagickにたどりつきました。(コマンドラインにはそもそも不慣れな者です)ImageMagickはバージョンによってコマンドが違うので新しいヴァージョンでの解説ありがたいです。
今回は当該フォルダ内のファイル操作ですが、下位フォルダの下位フォルダも探索するようにするにはどう書いたらいいか、もしよかったらご教授下さい。
よろしくお願いいたします。
miya様
ブログを見ていただきありがとうございます。
ご質問の件、記事に載せているバッチ処理ですが、
サブフォルダも対象になっているかと思います。
ご確認ください。
宜しくお願いします。