此问题的上下文是ImageMagick,但问题是一般的问题。windows批处理if语句只在一行上有效
我试图写一个批处理文件外壳,有条件地调用两个ImageMagick exe文件之一取决于安装(同一批处理文件可以在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,可能是由于前一行使用了括号,但我不知道如何使其工作。任何指针赞赏。
完美。选项1解决了这个问题,但是,在这种情况下,括号不是必需的,但它很好地知道如何在条件内处理它们(在ImageMagick括号中使用地点图像结果在堆栈中)。非常感谢您的全面回答。 – rossmcm