LoginSignup
2
1

More than 3 years have passed since last update.

フォルダ配下の画像一覧HTMLの作成バッチ

Last updated at Posted at 2020-07-15

はじめに

「アニメーションGIF」はエクスプローラ上だとアニメーションされないらしく、一挙に数十ファイルのアニメーションGIFを1ウインドウで表示させたい。
というワガママさんに、一覧表示するHTMLを出力するからブラウザで見ろと対応した。

使い方

  1. 一気に表示させたい画像を一つのフォルダにまとめる
  2. 作ったバッチをそのフォルダにコピーする
  3. バッチを実行する
  4. "thumbnail.html"が作成されるのでブラウザで表示する

作ったバッチ

make_thumbnail_html.bat
@echo off
rem 画像をタイル状に表示させるHTMLを作るバッチ

rem 出力するファイル名
set HTML_FILE=thumbnail.html
rem タイルの列数
set TABLE_COLUMNS=3
rem タイルの幅(画像の幅)
set IMAGE_WIDTH=300

rem 検出する画像ファイルの拡張子
set FILE_TYPES=*.gif, *.png, *.jpeg, *.jpg, *.bmp

rem 出力先のファイルを消す(あったら)
if exist "%HTML_FILE%" del "%HTML_FILE%"

rem フォルダの名前を取得する
for %%I in (.) do set CUR_DIRNAME=%%~nI%%~xI

rem HTMLファイルの先頭部を出力する
call :OUT_HTML "^<!DOCTYPE html^>"
call :OUT_HTML "^<html lang='ja'^>"
call :OUT_HTML "^<head^>"
call :OUT_HTML "^<meta charset='Shift_JIS'^>"
call :OUT_HTML "^<title^>%CUR_DIRNAME%^</title^>"
call :OUT_HTML "^<style type='text/css'^>^<!-- td {vertical-align:top;}--^>^</style^>"
call :OUT_HTML "^</head^>"
call :OUT_HTML "^<body^>"

set /a FILE_COUNT=0
set /a COLUMN_NO=0

call :OUT_HTML "^<table^>"

rem ファイルを検索してタイルを出力する
for %%a in (%FILE_TYPES%) do (
     echo %%a
     call :OUT_TD_TAG "%%a"
)
rem 列数に満たなかった分だけ空のTDタグを出力する
if %COLUMN_NO% LSS %TABLE_COLUMNS% (
    call :OUT_DUMMY_TD_TAG
)
call :OUT_HTML "^</table^>"

rem HTMLファイルの終端部を出力する
call :OUT_HTML "^</body^>"
call :OUT_HTML "^</html^>"

goto :EOF

rem ============================================================
:OUT_TD_TAG

set IMAGE_FILE=%~1

rem 列番号を求める
set /A COLUMN_NO=%FILE_COUNT% %% %TABLE_COLUMNS% + 1

rem 1列目ならTRタグを出力する
if %COLUMN_NO% EQU 1 (
    call :OUT_HTML "^<tr^>"
)

rem 画像用タグを出力する
call :OUT_HTML "  ^<td^>"
if "%IMAGE_FILE%" NEQ "" (
    call :OUT_HTML "    %IMAGE_FILE%^<br/^>"
    call :OUT_HTML "    ^<img width='%IMAGE_WIDTH%' src='%IMAGE_FILE%' /^>"
)
call :OUT_HTML "  ^</td^>"

rem 最終列なら/TRタグを出力する
if %COLUMN_NO% EQU %TABLE_COLUMNS% (
    call :OUT_HTML "^</tr^>"
)

rem ファイル数を数える
set /a FILE_COUNT=%FILE_COUNT%+1

exit /b

rem ============================================================
:OUT_DUMMY_TD_TAG

rem 列数に満たない分のTDタグの個数を計算する
set /A DUMMY_LOOP=%TABLE_COLUMNS%-%COLUMN_NO%

rem 空のTDタグを出力する
for /l %%i in (1,1,%DUMMY_LOOP%) do (
    call :OUT_TD_TAG ""
)

exit /b

rem ============================================================
:OUT_HTML
set OUT_TEXT=%1
set OUT_TEXT=%OUT_TEXT:^^=^%

echo %OUT_TEXT:"=% >> %HTML_FILE%

exit /b

まとめ

Windows Batchだけで心配だったが、なんとか出力できた。
アニメーションGIF数十ファイルを表示させると壮観だが結構うざい。

HTMLタグ<,>のエスケープが面倒で、他に良い方法が思いつかなかった。
バッチファイルのセオリーのようなものが見つからなかったので、もう少し調べてみようと思う。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1