2017-02-01 7 views
0

別のbatファイルを実行するためのラッパーとして提供しようとしています。コマンドラインから引数を読み込み、その引数の位置を確認する必要があります。例えばbatファイル内の特定の引数の位置を読み取る方法

:私は「-i」かどうかをチェックしていますと「-t」オプションが指定されているか、それが指定されている場合ではない

、 が、それは別のbatファイルMain.bat In/path/myinput/ Out/path/myoutput/を呼び出すスクリプトでTest.bat -i path/myinput -t path/myoutput

私はハードコード場合 他 、それは別のbatファイルを呼び出しますMain.bat In/ Out/

私のスクリプトは[%2]を用いて入力パスを読み込むための位置取り組んでいます。しかし、私は同じパターンに従うようにユーザーを制限したくありません。 -tオプションを最初に使用し、次に-i秒を使用できます。

@echo off 
set position=0 
for %%a in (%*) do (
set /a position+=1 
if "%%~a"=="-i" Goto :found 
) 
echo -i not found! 
Goto eof 

:found 
echo Found as argument %position% 

:だから私は、これが役に立つだろう、私はMain.bat %inputpath% %Outputpath%

+0

なぜあなたは単に%1と%3の値をチェックしませんでしょうか? – Squashman

+2

無関係 - '/'はwinbatchのオプションを導入し、 '\\'はパス区切り文字です – Magoo

答えて

0

のように使用することができます if [%*]==[-i] (SET inputpath=In/[%(getpos()+1)]/) else (SET inputpath=In/)。だからのようないくつかのこと

"-j" "-i" のpostionを読む必要があるとすべての引数(%*)をループすると、変数がカウントアップされ、見つかった引数が目的の値と等しいかどうかがチェックされます。見つかった場合、ループが壊れ、引数の位置が書き出されます。

使用例:

myBat.bat abc def -i "not seen anymore"

出力:引数として発見出力3

myBat.bat "works with spaces as well" -i

:引数として見いださ2

実際にARを取得するにはこの構文を使用することができますgument:

call echo %%%myVar% 

全コード:

@echo off 
set position=0 
for %%a in (%*) do (
set /a position+=1 
if "%%~a"=="-i" Goto :found 
) 
echo -i not found! 
Goto eof 

:found 
echo Found as argument %position% 
set /a position=%position%+1 
call set bs=%%%position% 
echo %bs% 
+0

しかし、その位置からの読み方。私はこの 'set bs =%(%position%)'のようにしてみました。基本的に 'set bs =%2'のように動作するはずです。 2番目の引数を読み込んでいます。どちらがうまくいきません。 –

+0

@Cool_Binami edit made – geisterfurz007

+0

私は 'set bs = %%% position%'を使用しました。もし私がエコー%bs%をしているのなら、それは%2です。私は 'set bs =%2'を実行します。正しいコマンドライン引数 –

関連する問題