24

Windows バッチ ファイルに渡されるパラメーターが数値かどうかを確認する必要があります。チェックが変数に対しても機能することは良いことです。

コマンドが正規表現で使用されている同様の質問への回答を見つけました。findstr

私はその解決策を試しましたが、期待どおりに機能しません (少なくとも Windows 7 では)。

私のテストシナリオは次のとおりです。

AA  # not a valid number
A1  # not a valid number
1A  # not a valid number

11  # a valid number
4

10 に答える 10

8

これを試すことができます。渡される変数は、たとえばvarであり、%var%に等しい500です。

set /a varCheck=%var%
if %varCheck% == %var% (goto :confirmed) else (exit /B)
exit /B

:confirmed
:: You can use %var% here, and it should only be executed if it is numerical!

%var%が に等しければa3453d、 に設定さvarCheckれ、 がに等しくない0ため、バッチ処理を終了します。0a3453d

(3 行目の終了は、if ステートメントが何らかの理由で実行しないことを決定した場合に備えています... XD。)

于 2013-07-11T03:05:52.577 に答える
6

@hornzach - あなたはとても親密で、他の人よりもはるかに簡単な答えでした.

(少なくともwin 7で)エラーメッセージを非表示にするには、標準エラー出力(2)をnul(出力「ビットバケット」を静かに破棄する特別なファイル)にリダイレクトします

set /a varCheck = %var% 2>nul

その後、残りの答えは4つのテストケースで機能します。

テストケース付きの完全な回答:

call :CheckNumeric AA  "#NOT A VALID NUMBER"
call :CheckNumeric A1  "#NOT A VALID NUMBER"
call :CheckNumeric 1A  "#NOT A VALID NUMBER"

call :CheckNumeric 11  "#A VALID NUMBER"

call :CheckNumeric 1.23456789012345678901234567890.123456  "#NOT A VALID NUMBER"
goto :EOF

:CheckNumeric
@ECHO.

@ECHO Test %1
set /a num=%1 2>nul

if {%num%}=={%1} (
    @ECHO %1 #A VALID NUMBER, Expected %2
    goto :EOF
)

:INVALID
    @ECHO %1 #NOT A VALID NUMBER, Expected %2

出力:

Test AA
AA #NOT A VALID NUMBER, Expected "#NOT A VALID NUMBER"

Test A1
A1 #NOT A VALID NUMBER, Expected "#NOT A VALID NUMBER"

Test 1A
1A #NOT A VALID NUMBER, Expected "#NOT A VALID NUMBER"

Test 11
11 #A VALID NUMBER, Expected "#A VALID NUMBER"

Test 1.23456789012345678901234567890.123456
1.23456789012345678901234567890.123456 #NOT A VALID NUMBER, Expected "#NOT A VALID NUMBER"
于 2016-05-14T14:24:31.020 に答える