2016-10-21 144 views
0

我正在編寫批處理腳本以從其目錄中提取視頻文件。
到目前爲止,它將進入與特定名稱匹配的目錄。然後,我在該目錄中的每個項目上循環執行FOR循環。我想檢查一個項目是否是一個目錄(,我以前做過),如果它是進入該目錄,否則做其他的東西。
IF聲明中斷批處理腳本

的問題是,第二IF聲明(的檢查項目是否是一個目錄或不)更是打破了批處理腳本,給人的錯誤:

) was unexpected at this time

如果我刪除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% 
     ) 
    ) 
) 
+3

'%% j'返回的任何文件名是否都包含空格?你應該嘗試使用'if exists'%% j「'(和'if exists'%% i''')來代替。 – SomethingDark

+0

@SomethingDark是的,這完全有可能發生,謝謝你的洞察力,並會嘗試這種方法,當我可以 – wmash

+2

嘗試'IF EXIST'%%〜j「' – npocmaka

回答

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. 
    ) 

你可以看到,commandifelse部分的強制性一部分。 Windows cmd/.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\"(注斜槓)的檢查項目是否是一個目錄或不