延迟扩展错误

时间:2016-10-16 23:43:22

标签: batch-file delayedvariableexpansion

我正在玩批处理文件和延迟扩展 我只是试图打印目录中所有项目的文件/文件夹名称。

@ECHO off

SET title=%1
SET mp4="mp4"
SET mkv="mkv"
SET avi="avi"
SET minimumSize=300

CD "E:\Documents\Films\Need_compressing"
SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%i IN (*) DO (
    SET item = %%i
    ECHO !item!
    :: print dir/file name
    :: if "!i!" == "%title%" (
    ::  echo "found file!"

    :: 'if' directory
    ::  if exist "%title" (
    ::      echo "is a directory"
    ::      cd %title%
    ::      echo "title: " %title%
    ::      for %%f in (*.*) do (

    ::          set file = %%f
    ::          set extension = %%~xf
    ::          set fileSize = %%~zf

    ::          if %extension% == %mp4% if %extension% == %mkv% if %extension% == %avi% (
    ::              if %fileSize% gtr %minimumSize% (
    ::                  move %file% %compressFolder%
    ::              )
    ::          ) 
    ::      )
    ::  )
    ::)
)
ENDLOCAL

当我这样做时,我会收到错误:

  

此命令的语法不正确

我唯一能想到的是我错误地使用了延迟扩展。

1 个答案:

答案 0 :(得分:3)

语法错误的原因是因为::不是用于评论。它们实际上是标签标记。使用REM进行评论。

其他问题......

删除=

周围的空格
SET item=%%i

如果使用呼叫,也不必使用延迟扩展。

CALL ECHO %%item%%

另外,请记住,此FOR命令仅显示文件(无文件夹)。如果您想要文件夹和文件,只需使用DIR /B(否FOR)。如果您想要处理它们,可以使用FOR /F,如下所示:

FOR /F "delims=" %%a IN ('DIR /B') DO ( echo do stuff with "%%~a" )

(编辑) 根据您更新的文件,您可能还希望使用CD /D切换到您的E :(除非您已经使用E:,在这种情况下您不需要它)。