Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如果else不在循环中工作,dos框在我看到任何错误之前关闭_Batch File - Fatal编程技术网

Batch file 如果else不在循环中工作,dos框在我看到任何错误之前关闭

Batch file 如果else不在循环中工作,dos框在我看到任何错误之前关闭,batch-file,Batch File,我对批处理文件的经验很少,并且是从我编写的其他文件中拼凑出来的 批处理文件将在图标上方放置一个图像文件夹,并应根据照片方位进行不同的大小调整 dos窗口在我读取任何错误之前关闭 如果我在循环中只有convert或identification行(一次一行),则它可以工作,但如果else失败,则它可以工作。在IF-ELSE被激活的情况下,DO不高亮显示“我的文本编辑器”中的结束父项后的左括号 任何帮助都将不胜感激 REM @echo off REM Read all the png images

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

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

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

如果我在循环中只有convert或identification行(一次一行),则它可以工作,但如果else失败,则它可以工作。在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  (

首先,展开参数并使用黑引号来避免空格中的错误

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

试试这个:

(更新)

  • 确保将正确的参数传递给带有\斜杠的脚本,而不是/

  • 首先,展开参数并使用黑引号来避免空格中的错误

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

    试试这个:

    (更新)

  • 确保将正确的参数传递给带有\斜杠的脚本,而不是/


  • 我猜您在windows中--您需要打开命令提示符并从那里运行此脚本。这将阻止该框关闭,并允许您正确调试任何错误。感谢jnunn,我现在可以看到错误,并已将其添加到原始帖子中。它没有看到您的%width%变量,这很有趣。我对dos批处理文件不够精通,无法解决这个问题。尝试将宽度硬编码到某个东西,看看它是否会拾取它,比如:
    SET width=10
    而不是
    SET width=identification-format“%%[fx:w]”
    我刚刚注意到,因为在标识行上没有可以获取其尺寸的图像!上面的代码再次修改,但仍然没有输出。我现在就试试你的建议。没有硬编码,如果LSS,变量仍然会出现C:\>(我想知道问题是否在那之前。我猜你是在windows中--你需要打开命令提示符并从那里运行此脚本。这将阻止该框关闭,并允许你正确调试任何错误。感谢jnunn,我现在可以看到错误,并将其添加到原始帖子中。它没有看到你的%width%变量,这是这很有趣。我对dos批处理文件还不够精通,无法解决这一问题。请尝试将宽度硬编码为某个值,看看它是否能接受,例如:
    SET width=10
    而不是
    SET width=identifite-format“%%[fx:w]”
    我刚刚注意到,因为在标识行上没有图像可以获取的维度!上面的代码再次修改,但仍然没有输出。我现在将尝试您的建议。如果LSS为C:\>,则不会对变量进行硬编码(我想知道问题是否在那之前。谢谢你的回复,我已经尝试了你的代码,但我仍然得到一个错误:C:\>C:\Users\Anthony\Pictures\batch\u tests\sweden\u 1.bat C:\Users\Anthony\Pictures\batch\u tests\tests(此时出乎意料。C:\>看起来仍然像是(在DO是一个问题之后,问题应该在“()在比较宽度和高度行时,如果其中一个变量为空,则会得到一个错误“(”,我已经更新了上面的代码,让您再次检查是否一切正常,然后重试并进行注释。恐怕我仍然会得到一个(此时出乎意料。没有其他输出。我使用Notepad++作为文本编辑器,并且(DO之后是绿色,最后一个)与DO后面的一对关联的是黑色,它们都没有变为红色来表示一对,就像它们对其他几对()一样告诉我在哪里可以找到标识工具,然后我可以为您解决这个问题(但请再次查看我的最后一条评论)。编辑:好的,我找到了imagemagick,请等待我的答复。在您上次编辑之后,我仍然可以得到答案(此时意外。现在上床睡觉,明天再查看。感谢您的回复,我尝试了您的代码,但仍然出现错误:C:\>C:\Users\Anthony\Pictures\batch\u tests\sweden\u 1.bat C:\Users\Anthony\Pictures\batch\u tests\tests(此时意外。C:\>看起来仍然像(在DO是一个问题之后不是,问题应该在“(”在比较宽度和高度行时,如果其中一个变量为空,则会得到一个错误“(”,我已经更新了上面的代码,让您再次检查是否一切正常,请尝试并评论。我恐怕我仍然会得到一个错误。)(此时出乎意料。没有其他输出。我使用记事本++作为文本编辑器,与DO后一个相关联的(DO后为绿色,最后一个)为黑色,它们都没有变为红色以表示一对,就像它们对其他对()所做的那样告诉我在哪里可以找到标识工具,然后我可以为您解决此问题编辑:好的,我找到了imagemagick,请稍等我的回复。在您上次编辑后,我仍然收到了(此时意外情况。现在上床睡觉,明天再查看)。
        @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