2016-10-16 71 views
3

我玩弄批處理文件和延遲擴展。
我只是試圖打印目錄中所有項目的文件/文件夾名稱。延遲的擴展錯誤

@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 

當我這樣做,我會得到錯誤:

The syntax of this command is incorrect

我能想到的唯一的事情是,我使用的延遲擴展錯誤。

+0

您使用的是哪個版本的Windows? –

+0

Windows 10教育x64 – wmash

回答

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 :,在這種情況下你不需要它)。

+0

仍然沒有看,仍然是相同的錯誤... – wmash

+0

然後,你不包括你的整個批處理文件。它在這裏工作。 – soja

+0

我將修改帖子以包含整個批處理文件。 – wmash