IF语句中断批处理脚本

时间:2016-10-21 21:02:25

标签: batch-file

我正在编写一个批处理脚本来从目录中提取视频文件 到目前为止,它将进入与特定名称匹配的目录。然后我在该目录中的每个项目上执行FOR循环。我想检查一个项目是否是一个目录(我以前做过),如果是,那么进入该目录,否则做其他事情。

问题是第二个IF语句(检查项目是否是目录)正在破坏批处理脚本,给出错误:

  

)此时出人意料

如果我删除了IF,代码会按预期执行(我已清楚地标记了代码中的IF语句)...

CODE:

@ECHO off

SET title=%1
SET mp4=".mp4"
SET mkv=".mkv"
SET avi=".avi"
SET minimumSize=300
SET needCompressingDir="E:\Documents\Films\Need_compressing"

CD %needCompressingDir%
FOR /f "delims=" %%i IN ('DIR /B') DO (
    IF %%i == %title% (
        IF EXIST %%i (
            CD %%i
            FOR /f "delims=" %%j IN ('DIR /B') DO (
                rem this 'IF' statement breaks it
                IF EXIST %%j (

                ) ELSE (

                )
            )
        ) ELSE (
            MOVE %%i %needCompressingDir%
        )
    )
)

1 个答案:

答案 0 :(得分:2)

阅读if /?

Performs conditional processing in batch programs.

IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
…
  command           Specifies the command to carry out if the condition is
                    met.  Command can be followed by ELSE command which
                    will execute the command after the ELSE keyword if the
                    specified condition is FALSE

The ELSE clause must occur on the same line as the command after the IF.  For
example:

    IF EXIST filename. (
        del filename.
    ) ELSE (
        echo filename. missing.
    )

您可以看到command部分if 强制性部分。elsecmd部分。 Windows .bat / ()解释程序不接受命令块REM:它不被视为命令。至少使用 FOR /f "delims=" %%j IN ('DIR /B') DO ( rem this 'IF' statement breaks it IF EXIST "%%~j\" ( rem directory ) ELSE ( rem not directory ) ) 注释(一个没有效果的命令):

IF EXIST "%%~j\"

已更新:使用{{1}}(备注反斜杠)检查该项是否为目录