この問題のコンテキストはImageMagickでしたが、問題は一般的なものです。
インストールされているものに応じて、2つのImageMagick exeファイルの1つを条件付きで呼び出すバッチファイルシェルを作成しようとしました(同じバッチファイルを2つの異なるPCで実行できます)。
私はシェルバッチファイルを持っていますIM.BAT
:
if exist "C:\Program Files\ImageMagick-6.8.8-Q16\" "C:\Program Files\ImageMagick-6.8.8-Q16\Convert" %*
if exist "C:\Program Files\ImageMagick-6.8.8-Q8\" "C:\Program Files\ImageMagick-6.8.8-Q8\Convert" %*
そしてこのファイルからそれを呼び出しますMergeImages.BAT
:
: Use: call MergeImages <input file1> <input file2> <output file>
:
call IM.bat ^
"%~1" ^
^( "%~2" -gravity center ^) ^
-composite ^
"png32:%~3"
から順番にそれを呼び出しますTEST.BAT
:
call MergeImages.bat image1.png image2.png image3.png
それはすべて期待どおりに機能します。しかし、私がの流れをきれいにしようとしたときIM.BAT
:
if exist "C:\Program Files\ImageMagick-6.8.8-Q16\" (
"C:\Program Files\ImageMagick-6.8.8-Q16\Convert" %*
goto :EOF
)
if exist "C:\Program Files\ImageMagick-6.8.8-Q8\" (
"C:\Program Files\ImageMagick-6.8.8-Q8\Convert" %*
goto :EOF
)
echo Error: No executable found
エラーが発生します-composite was unexpected at this time
。エラーはImageMagickではなくバッチプロセッサから発生していると確信しており、おそらく前の行で括弧を使用していることが原因ですが、それを機能させる方法がわかりません。どんなポインタでもありがたいです。
)
中には^( "%~2" -gravity center ^) ^
途中でIM.BATでIFブロックを閉じています。IM.BATが認識できるようになる前に削除されるため、現在のエスケープは何もしていません。また、開口部の脱出は(
必要ありません。
問題を解決するためのいくつかのオプションがあります。
オプション1:MergeImages.batを変更する
: Use: call MergeImages <input file1> <input file2> <output file>
:
call IM.bat ^
"%~1" ^
( "%~2" -gravity center ^^) ^
-composite ^
"png32:%~3"
オプション2:IM.BATを変更する
if exist "C:\Program Files\ImageMagick-6.8.8-Q16\" ^
"C:\Program Files\ImageMagick-6.8.8-Q16\Convert" %* & goto :EOF
if exist "C:\Program Files\ImageMagick-6.8.8-Q8\" ^
"C:\Program Files\ImageMagick-6.8.8-Q8\Convert" %* & goto :EOF
echo Error: No executable found
よくわかりませんが、かっこも必要ですか?引数リストでそのように使用されている括弧を見たことがありません(そしてImageMagickを使用したこともありません)。MergeImages.batが次のように単純である可能性があるかどうか疑問に思います。
: Use: call MergeImages <input file1> <input file2> <output file>
:
call IM.bat ^
"%~1" ^
"%~2" -gravity center ^
-composite ^
"png32:%~3"
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加