2

入力「-input1」、「-input2」、および「-input3」を受け取るバッチファイルがあります。ここでは、ユーザーが入力パラメーターを「-test」または「-blah」またはその他のパラメーターとして指定した場合のように、パラメーターを検証する必要があり、「未認識のパラメーター」としてエラーをスローする必要があります。どうすればこれを達成できますか? パラメータを %1 %2 などとして繰り返してみましたが、必要な動作を実現できませんでした。

IF "%1"=="" (
 GOTO :ERROR3
)
IF "%1"=="-input1"  (
 SET value1=%2
)
@IF "%3"=="-input1"  (
 SET value1=%4
)
@IF "%5"=="-input1"  (
 SET value1=%6
)
@IF "%7"=="-input1"  (
 SET value1=%8
)
IF "%1"=="-input2" (
 SET value1=%2
)
@IF "%3"=="-input2" (
 SET value2=%4
)
@IF "%5"=="-input2" (
 SET value2=%6
)
@IF "%7"=="-input2" (
 SET value2=%8
)
IF "%1"=="-input3" (
 SET value3=%2
)
@IF "%3"=="-input3" (
 SET value3=%4
)
@IF "%5"=="-input3" (
 SET value3=%6
)
@IF "%7"=="-input3" (
 SET value3=%8
)

    // some codes here

:ERROR1
ECHO "ERROR1"
GOTO :END
:ERROR2
ECHO "ERROR1"
GOTO :END
:ERROR3
ECHO Usage SAMPLE.bat -input1 "value1" -input2 "value2" -input3 "value3"
:END

どんな助け..

4

2 に答える 2

3

パラメータをシフトする簡単な例を次に示します。

@echo off
setlocal
set "value1="
set "value2="
set "value3="

:Parse
set "Param=%~1"
if not defined Param goto Validate
if "%Param%"=="-input1" set "value1=%2" & goto Next
if "%Param%"=="-input2" set "value2=%2" & goto Next
if "%Param%"=="-input3" set "value3=%2" & goto Next
goto Error1

:Next
shift & shift
goto Parse

:Validate
if defined value1 if defined value2 if defined value3 goto Main
goto Error2

:Main
echo %value1% %value2% %value3%
goto End

:Error1
echo Invalid Parameter: %1 %2
goto End

:Error2
echo Usage %~nx0 -input1 "value1" -input2 "value2" -input3 "value3"
goto End

:End
endlocal
于 2013-10-24T15:56:37.600 に答える
0

以下のバッチ ファイルを使用すると、パラメーターの数と名前を 1 行だけ変更して変更できます。

@echo off
setlocal EnableDelayedExpansion

rem Define the list of parameters
set params=-input1 -input2 -input3

rem Initialize the array of parameters and their values
set n=0
for %%a in (%params%) do (
   set /A n+=1
   set param[%%a]=!n!
   set "value!n!="
)

:nextParam
set "param=%~1"
shift
if not defined param goto start
if defined param[%param%] (
   set "value!param[%param%]!=%~1"
   shift
   goto nextParam
)
echo ERROR - Bad parameter: %param%
goto :EOF

:start
echo Values of given parameters:
echo/
for /L %%i in (1,1,%n%) do echo Value%%i = "!value%%i!"
于 2013-10-24T18:27:37.063 に答える