2009-09-30 45 views
15

我想確保我打電話批次時,不超過2個參數傳遞。批次:檢查參數的數量

有沒有一種簡單的方法來檢查,還是我打電話需要,直到參數值是空的轉變,因爲多少次?

+4

見http://stackoverflow.com/questions/1291941/batch-files-number -of-command-line-arguments – 2009-09-30 13:11:22

回答

23

您可以簡單地測試了第三個參數的存在和取消(如果存在):

if not "%~3"=="" (
    echo No more than two arguments, please 
    goto :eof 
) 

但更具體,有越來越傳遞給批處理參數的數目沒有直接的方法,短shift ING的並數它們。所以,如果你想確保不超過19個參數通過,那麼你需要做到這一點。但是,如果預期參數的數量低於9,以上方法效果很好。

+0

愚蠢的我,甚至沒有想過這麼簡單的方法! 謝謝! – 2009-09-30 13:21:33

+0

這個與[方括號]的訣竅使批處理的怪癖外觀和感覺與bash的怪癖一致 – n611x007 2013-08-23 18:56:33

+0

最好使用引號而不是方括號,但我會建議使用'「%〜3」'來避免使用引號參數 – jeb 2013-08-25 09:46:04

5
IF NOT "%3"=="" GOTO Too_Many_Args 
1

這裏是我收集的小例子和解析參數列表和傳遞給外部命令:

@echo off 
setlocal enabledelayedexpansion 

if %1. EQU . (
    echo %~0 [-t NUM] FILE [FILE...] 
    goto end 
) 

:args_loop 
if "%~1" EQU "-t" (
    set arg_t=%1 
    set arg_t_val=%2 
    shift 
) else (
    set files=!files! %1 
) 
shift 
if %1. NEQ . goto args_loop 

:args_loop_end 

x:\path\to\external.exe %arg_t% %arg_t_val% %files% 

:end