1

我对批处理文件的经验很少,并且是从我编写的其他文件中拼凑而成的。

批处理文件将在图标上放置一个图像文件夹,并应根据照片方向进行不同的调整大小。

在我读取任何错误之前,dos 窗口关闭。

如果我在循环中只有转换或识别行(一次一个),它可以工作,但如果它失败了。使用 IF ELSE 激活 DO 后的左括号不会在我的文本编辑器中突出显示右括号。

任何帮助,将不胜感激。

REM @echo off

REM Read all the png images from the directory
FOR %%f IN (%1\*.png) DO (

REM Set the variable width to the image width
SET width=identify -format "%%[fx:w]" %%f

REM Set the variable height to the image height
SET height=identify -format "%%[fx:h]" %%f

REM Check if the photo is portrate or landscape and run the relavant code
IF %width% LSS %height% (
convert "%%f" -trim -resize x740 "modified/%%~nf.jpg" 
) ELSE (
convert "%%f" -trim -resize x740 -background blue -gravity center -extent 740x740 "modified/%%~nf.jpg" 
)
)

PAUSE

错误:

C:\>REM @echo off

C:\>REM Read all the png images from the directory
( was unexpected at this time.

C:\>IF  LSS  (
4

1 回答 1

1

首先,扩展参数并使用黑引号来规避空间名称中的错误。

其次,您不能以您尝试执行的方式将命令的输出设置为变量。您需要使用 FOR /F 获取命令的输出,没有其他方法。

试试这个:

(更新)

  1. 确保使用 \ 斜杠而不是 / 将正确的参数传递给脚本

.

    @echo off

    Setlocal enabledelayedexpansion

    :: Removes the last slash if given in argument %1
    Set "Dir=%~1"
    IF "%DIR:~-1%" EQU "\" (Set "Dir=%DIR:~0,-1%")

    :: Read all the png images from the directory

    FOR %%f IN ("%dir%\*.png") DO (

        :: Set the variable width to the image width
        For /F %%# in ('identify -format "%%[fx:w]" "%%f"') Do (SET /A "width=%%#")

        :: Set the variable height to the image height
        For /F %%# in ('identify -format "%%[fx:h]" "%%f"') Do (SET /A "height=%%#")

        :: Create the output folder if don't exist
        MKDIR ".\modified" 2>NUL

        :: Check if the photo is portrate or landscape and run the relavant code
        IF !width! LSS !height! (
            convert "%%f" -trim -resize x740 "modified\%%~nf.jpg" 
        ) ELSE (
            convert "%%f" -trim -resize x740 -background blue -gravity center -extent 740x740 "modified\%%~nf.jpg" 
            )
        )

    PAUSE&EXIT
于 2012-11-21T21:35:35.490 回答