2009-09-30 3 views
15

バッチを呼び出すときに2つ以上のパラメータが渡されないようにしたいと思います。バッチ:パラメータの数を確認する

これを簡単にチェックする方法はありますか、またはパラメータ値が空になるまで何度でもSHIFTを呼び出す必要がありますか?

+4

はhttp://stackoverflow.com/questions/1291941/batch-files-numberを参照してください。コマンドライン引数-of- –

答えて

23

あなたは単に三番目のパラメータが存在するかどうかをテストし、取り消すことができます存在する場合:

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

しかし、より具体的には、バッチに渡された引数の数を取得する直接的な方法は、shift INGの短いありませんそれらを数える。だから、19を超える引数が渡されないようにしたい場合は、それを正確に行う必要があります。しかし、期待される議論の数が上記の9を下回るならば、方法はうまくいく。ここで

+0

愚かな私は、このような単純な方法についても考えなかった! ありがとう! –

+0

[角カッコで囲まれたこのトリック]バッチのクォークは、bashのクォークと一貫して見える&感じる – n611x007

+0

角カッコの代わりに引用符を使用する方が良いですが、 "%〜3" 'を使用することをおすすめします。パラメータ – jeb

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 
関連する問題