PNGファイルのファイルサイズを小さくしたい。色深度を落とせばいいのだろうと思う。Microsoft Copilotに聞いてみた。
今回はOUTというフォルダを作って、変換後のファイルはそこに出力する。OUTフォルダの作成もバッチファイルにまかせる方向で(こういうのもうまいことCopilotが作ってくれる)。
いろいろエラーが出たので、「こういうエラーメッセージが出たんだけど」と聞き直してくと、エラーが出ないやつができあがった。
@echo off
setlocal enabledelayedexpansion
set "output_dir=%~dp0OUT"
if not exist "%output_dir%" mkdir "%output_dir%"
for %%f in (%*) do (
echo Processing: %%f
set "absolute_path=%%~f"
set "filename=%%~nf"
set "extension=%%~xf"
magick "%%~f" -depth 8 "%output_dir%\%%~nf%%~xf"
if !errorlevel! neq 0 (
echo Error processing %%~f
) else (
echo Processed %%~f successfully
)
)
echo All files have been processed and output to %output_dir%
pause
エラーが出てた原因は絶対パスを渡せてなかったからっぽい。最後は絶対パスで指定して、っていうのも書いたかと思う。ここまでのやりとりで返ってきたメッセージをいくつか列挙。
このスクリプトのポイントは以下の通りです:
ファイルが存在するか確認します。
magickコマンドを使って色深度を変更し、OUTフォルダに保存します。
if %errorlevel% neq 0を使用して、magickコマンドの実行中にエラーが発生した場合の処理を追加しました。
これで、エラーが発生した場合にも適切に対応し、出力ファイルをOUTフォルダに保存することができます。試してみてくださいね!他に質問や修正が必要な点があれば教えてください。
このスクリプトは、以下のように動作します:
%%~dpnx0でバッチファイル自身の絶対パスを表示し、%%~dpnxで各ファイルの絶対パスを取得します。
%%~dpnxを使って入力ファイルの絶対パスを設定します。
magickコマンドを使って色深度を変更し、OUTフォルダに保存します。
この方法でエラーが回避できるか試してみてください。他にご質問や修正したい点があれば教えてくださいね!
このスクリプトの変更点は以下の通りです:
setlocal enabledelayedexpansionを追加して遅延環境変数展開を有効にしました。これにより、ループ内で設定された変数を正しく展開できます。
変数の呼び出しに!を使用して、遅延展開を行うようにしました。
これで、ファイルが正しく処理されるか試してみてください。他に質問や修正が必要な点があれば教えてくださいね!
修正点:
%%~dpnx0を %%~f に変更して、ファイルの絶対パスを取得するようにしました。
absolute_path の設定を %%~f を使用して正しく取得できるように変更しました。
magick "%%~f" を使用して、絶対パスを直接指定するようにしました。
これでエラーが回避できるか試してみてください。うまくいくことを願っています!他にも質問や修正があれば教えてくださいね。
これでエラーがなくなり、ファイルサイズは最初の1/3くらいになった。
コメント