2016-11-03 146 views
0

我傳遞的命令行參數來批處理腳本以及設置一個變量,像這樣:獲取函數的參數獲取命令行參數 - 批量

SET dirWhereKept=%1 

我的問題是,我所說的批處理腳本中的函數有3個參數。當試圖讓那些3個參數,它會通過命令行,而不是傳遞的那些:

FOR /f "delims=" %%i IN ('DIR /B') DO (
    IF EXIST "%%~i\" (
     rem nothing 
    ) ELSE (
     CALL :checkIfWantedFile %%i "%%~xi" %%~zi 
    ) 
) 

:checkIfWantedFile 
SET file=%~1 
SET fileExtension=%~2 
SET fileSizeInBytes=%~3 

ECHO FILE: %file% 
ECHO EXTENSION: %fileExtension% 
ECHO SIZE: %fileSizeInBytes% 

例如,如果我在"Avatar ECE (2009)"傳遞作爲命令行參數(這是一個目錄),然後調用時功能我傳遞:

  • %%iAvatar.mp4
  • "%%~xi"".mp4"
  • %%~zisome_int

當我在checkIfWantedFileECHO的,輸出將是:

FILE: Avatar ECE (2009) 
EXTENSION: 
SIZE: 

,因爲它是得到命令行參數,而不是功能的。

我看了一下this和其他一些,但不能得到它的工作。

編輯:

這個批處理腳本的意圖是可能進入(通過命令行參數提供)給定的目錄,並提取和視頻文件(.mp4.mkv.avi),其在那裏。有時,視頻文件嵌套在子目錄中,這就是爲什麼我要檢查FOR循環中的項目是否爲文件夾。如果是,則批處理腳本打算進入子目錄並檢查是否有任何想要的視頻文件存在或不存在並提取它們。

我添加了一個選項,如果腳本遇到不需要的文件,它將被刪除。但這不是一個要求。

目的還在於,當目錄(在命令行參數中提供)遞歸清除所有視頻文件時,它將被刪除。

由於不想要的視頻樣本文件有時會存在,我已經把檢查以及檢查在MB的文件的大小,如果是GTR那麼%minimumSize%那麼它是一個有用的文件,並可以提取

我的全代碼如下:

@ECHO off 

SET "dirWhereKept=%1" 
SET mp4=".mp4" 
SET mkv=".mkv" 
SET avi=".avi" 
SET needCompressingDir="E:\Need_compressing" 
SET minimumSize=200 

CD %needCompressingDir% 
CD %dirWhereKept% 
FOR /f "delims=" %%i IN ('DIR /B') DO (
    IF EXIST "%%~i\" (
     rem do nothing 
    ) ELSE (
     GOTO :EOF 
     CALL :checkIfWantedFile "%%i" "%%~xi" "%%~zi" 
    ) 
) 

:checkIfWantedFile 
SET file=%~1 
SET fileExtension=%~2 
SET fileSizeInBytes=%~3 

IF "%fileExtension%" == %mp4% (
    CALL :checkFileSize %fileSizeInBytes% 
) ELSE (
    IF "%fileExtension%" == %mkv% (
     CALL :checkFileSize %fileSizeInBytes% 
    ) ELSE (
     IF "%fileExtension%" == %avi% (
      CALL :checkFileSize %fileSizeInBytes% 
     ) ELSE (
      rem this is not required! 
      CALL :deleteFile 
     ) 
    ) 
) 

:checkFileSize 
SET /a fileSizeInMB=%~1/1024/1024 

IF %fileSizeInMB% GTR %minimumSize% (
    CALL :moveFileToCompress 
) 

:deleteFile 
ECHO "Delete called!" 

:moveFileToCompress 
MOVE %file% %needCompressingDir% 
+0

始終正確使用引號:將'SET dirWhereKept =%1'更改爲'SET'dirWhereKept =%〜1「',因此引號不會成爲變量值的一部分,但會阻止該行在特殊字符上失敗;然後將'%% i'改爲''%%〜i「'等等。 '〜'刪除潛在的引號;再加上明確的''「',這確保了在值周圍總是有一對'」「...... – aschipfl

回答