2011-02-02 111 views
15

在我的批處理文件中,我想將多個參數傳遞給其他應用程序。如何批量傳遞多個參數?

現在我做

app.exe %1 %2 

它只能傳遞兩個參數,但我想通過傳遞給該批次的所有參數(我寧願不寫%1%2%3 %4 ...

有什麼神奇的方法可以做到嗎?

回答

35

有一種神奇的方式!我知道,但我不記得它。

%*

3

你可以通過參數使用SHIFT提示和循環。以下是一個演示示例,您可以用提示加載應用程序來替換最終的ECHO提示。

@ECHO OFF 

SET PARAMS= 

:_PARAMS_LOOP 

REM There is a trailing space in the next line; it is there for formatting. 
SET PARAMS=%PARAMS%%1 
ECHO %1 
SHIFT 

IF NOT "%1"=="" GOTO _PARAMS_LOOP 

ECHO %PARAMS% 

PAUSE 

如果您需要某種動態參數計數,或者您想禁止某個參數,這可能會很有用。

+0

+1,只有我會放在空的參數檢查* *前處理的參數。 – 2011-02-04 22:34:01

3

另一種方法是使用一個雙引號參數。在調用其他應用程序時,只需在命令行上使用%~N設備即可刪除引號。

如果您打算傳遞給應用程序的某些參數本身是雙引號的,那麼這些引號字符必須重複兩次。

下面是一個使用第一參數作爲應用程序的名稱,第二作爲組合的參數列表的圖示腳本傳遞到應用程序:要求不同的情況的腳本的

@ECHO OFF 
CALL %1 %~2 

以下是實例(通一個參數或多個參數或引用參數)。

  1. 通行證1參數到該應用:

    C:\>mybatch.bat app.exe "app_param" 
    C:\>mybatch.bat app.exe app_param 
    
  2. 通行證幾個參數:

    C:\>mybatch.bat app.exe "app_param1 app_param2 app_param3" 
    
  3. 傳遞包含空格的參數(和因此必須進行引用):

    C:\>mybatch.bat app.exe """parameter with spaces""" 
    
  4. 的組合例如:一些參數是用空格,其他人都沒有:

    C:\>mybatch.bat app.exe "param_with_no_spaces ""parameter with spaces"" another_spaceless_param"