0

作成する必要のあるバッチスクリプトがあります。それをscript.batと呼びましょう。そして、私はそれにオプションを持たせたいので、それらをoption1とoption2と呼びましょう。有名な-私たちがどこでも見るのを手伝ってください。

そして、ユーザーのニーズに応じて、次の4行をスクリプトを起動するための4つの可能なコマンドにします。

script.bat -option1 value1 -option2 value2
script.bat -option2 value2 -option1 value1
script.bat -option1 value1 
script.bat -option2 value2

次に、スクリプトのコーディングについて説明します。オプションの読み取りを処理するための適切な方法が必要です。パラメータの読み取り値について知っています(プログラム名の場合は%0、パラメータ1の場合は%1など)。ただし、名前が示すように、オプションはオプションで任意の順序にすることができるため、これはあまり柔軟ではありません(コードブロックの2行目の上記のコマンドを参照)。

どうやってそれをやりますか?

ありがとう !

4

2 に答える 2

3

あなたが求めていたものを100%ではありませんが、どうですか?

@echo off

setlocal

set OPTION1=
set OPTION2=
set OPTION3=

:ARGS_LOOP
if {%1} == {} goto END_OF_ARGS
set ARG=%1

if /i "%ARG:~0,9%" == "/OPTION1:" set OPTION1=%ARG:~9%
if /i "%ARG:~0,9%" == "/OPTION2:" set OPTION2=%ARG:~9%
if /i "%ARG:~0,9%" == "/OPTION3:" set OPTION3=%ARG:~9%

shift

goto ARGS_LOOP

:END_OF_ARGS

echo Option 1 was set to [%OPTION1%]
echo Option 2 was set to [%OPTION2%]
echo Option 3 was set to [%OPTION3%]

endlocal

これは、たとえばTEST.CMDとして保存し、次のように実行できます。

TEST.CMD / option1:xxx / option2:yyy

などコマンドラインで指定されたオプションの順序は重要ではありません。

于 2013-03-14T21:10:31.777 に答える
2
@ECHO OFF
SETLOCAL
SET options=option1 option2 anotheroption
SET switches=switch1 switch2 anotherswitch
CALL :readoptions %*
FOR %%i IN (%options% %switches% badoptions) DO IF DEFINED %%i (SET %%i) ELSE (ECHO %%i NOT set)
GOTO :eof

:readoptions
FOR %%i IN (%options% %switches% badoptions) DO (SET %%i=)
:optlp
SET _parm1=%1
IF NOT DEFINED _parm1 GOTO :EOF
FOR %%i IN (%switches%) DO IF %_parm1%==-%%i SET %%i=Y&(SET _parm1=)
IF NOT DEFINED _parm1 shift&GOTO :optlp
FOR %%i IN (%options%) DO IF %_parm1%==-%%i (
SET %%i=%2
IF DEFINED %%i shift&shift&(SET _parm1=)
)
IF DEFINED _parm1 SET badoptions=%badoptions% %1&SHIFT
GOTO :optlp

/options または /switches が必要な場合、変更は明らかなはずです

スイッチの任意のセットについて、スイッチ名を er に入れ、switches同様にオプション名をoptions. -switchnameコマンドラインに が見つかった場合、変数switchnameは Y に設定されます。それ以外の場合は設定されません。同様に、-optionnameが見つかった場合、次のパラメーターが変数 の値として設定されます。それ以外のoptionname場合optionnameは設定されません。

指定されたスイッチ名でもオプション名でもオプション値でもないパラメータはすべて、badoptions

したがって、オプションとスイッチのセットを次のように指定すると、コマンドは次のようになります。

thisbatch -switch2 -option2 optionvalue -invalid

変数option1anotheroptionswitch1およびanotherswitch;をクリアします。セットswitch2= Y ; セットoption2=オプション値およびbadoptions= -無効

于 2013-03-15T01:02:10.203 に答える