2017-04-09 13 views
0

私はバッチファイルを簡単にチェックしようとしています。 argCountには正しい番号が含まれていますが、変数と番号の比較に問題があります。引数の数が3に等しくない場合にヘルプを表示し、ファイルの最後に移動します。
私が試した:
if not %argCount% == 3
if not %argCount%=='3'
if not '%argCount%'=='3'
if %argCount% NEQ 3
をしかし、予想通り、これらのオプションのどれも働かない...私はいつもしようとしたオプションのほとんどは、私は関係なく、引数の数のメッセージを助ける示し、いくつかのスクリプトに3つの引数を渡すと、最初の3行なしでヘルプメッセージが表示されます(非常に奇妙です)。バッチファイルの引数の数を確認してください

@echo off 

set argCount=0 
for %%x in (%*) do (
    set /A argCount+=1 
) 
if not %argCount% == 3 (
    echo This script requires the next parameters: 
    echo - absolute path to file 
    echo - filter (explanation) 
    echo - true or false (explanation) 
    echo Examples: 
    echo start.bat full\path\to\the\file.ext test true 
    echo start.bat full\path\to\the\file.ext nof false 
    goto end 
) 

REM some another code 

:end 
+2

'のあなたのエコー)は' 'if'ブロックの終わりとして扱われています。すべての ')'をカッコで括弧内のコードブロック内でエスケープします。明示的な理由がない限り、[常に 'setlocal'](https://stackoverflow.com/a/15659309/1683264)を使用してください。 'goto:EOF'や' exit/b'を使うと、スクリプトの最後に ':end'ラベルを取り除くことができます。 – rojo

+0

@roheckバッチファイルに 'start.bat'という名前を付けることは、Windowsのコマンドインタプリタの組み込みコマンド__START__をオーバーライドするので、非常に悪い考えです。そのため、バッチファイルに 'start.bat'とは異なる名前を付けることを強くお勧めします。 – Mofi

答えて

2

理由だけではなく、構造を簡素化していない:

IF NOT "%~3"=="" IF "%~4"=="" GOTO START 
ECHO This script requires the next parameters: 
ECHO - absolute path to file 
ECHO - filter (explanation) 
ECHO - true or false (explanation) 
ECHO Examples: 
ECHO "%~nx0" "full\path\to\the\file.ext" test true 
ECHO "%~nx0" "full\path\to\the\file.ext" nof false 
GOTO :EOF 

:START 
+0

__START__はWindowsのコマンドインタープリタの組み込みコマンドでもあるため、ラベルとして「START」を使用することを除いて、良い考えです。ラベル「START」が機能します。しかし、バッチファイル内でコマンド__START__も使用する場合は、意味ラベルを持つ* start *を検索するか、意味コマンドを使用するのが難しくなるため、この文字列をラベルとして使用することはお勧めできません。ラベルとして「BEGIN」が良いでしょう。 – Mofi

+0

素晴らしいです、それは動作します! @Compoは、最初の行がどのように機能するかを説明することができますか? – rocknow

+0

3番目の引数が空ではなく(存在する)、4番目のパラメータが空の場合(存在しない場合)は、スクリプトの主要部分を開始します。他のシナリオでは、終了する前に指示を受け取ります。 _(BTW、 'GOTO:EOF'の直前に' TIMEOUT -1 1 NUL'を追加して、エンドユーザがメッセージを読む時間があるようにすることができます)_。 – Compo

関連する問題