2017-09-13 6 views
1

これは私の最初の質問です。 = ABC、DEF、XYZcmdスクリプト、トークン変数(例:%% a)を呼び出しに渡す方法

サーバリスト、....私は別のカンマ区切りリストB =リンゴ、ボール、猫を得るこれらの各項目について ...

は私が持っているバッチスクリプトを持っています私は、プロセスへの:headerbの完全なリストを取得する必要があり

--------------------------------------------- 
a is abc 
b is apple,ball,cat 
inside header values are "abc" apple 
-------- 
a is def 
b is apple,ball,cat 
inside header values are "def " apple 
-------- 

:以下

SETLOCAL ENABLEDELAYEDEXPANSION 
for %%a in ("%serverlist:,=" "%") do (
for /F "delims= " %%b in (XXXXXXX) do ( 
echo a is %%~a 
echo b is %%~b 
call :header %%a %%b 
echo -------- 
) 
) 

:header 
(
echo inside header values are %1 %2 
) 

OUTPUTを行いネストされたループそれ以上です。 今のところ、私はbの最初の要素だけを呼び出しています。コメントからの正式な答えを一緒に置く

+1

引数 'call:header" %% a "" %% b "'を引用しますか? –

+0

恐ろしい!それはうまくいった。ありがとう – Sarfaraz

+1

メインループ内で 'call:header" %%〜a "" %%〜b "'を使用し、サブルーチンで '%〜1'と'%〜2'を使用して項目を引用しない... – aschipfl

答えて

0

  1. バッチサブルーチンへの引数は、スペースまたはカンマを持っている場合は、サブルーチンを呼び出すとき、あなたはあなたの引数を引用符で囲む必要があります。call :header "%%a" "%%b"を。

  2. aschipflのおかげで)サブルーチン内で、処理の引数を引用符で囲まないようにするには、%~1%~2を使用します。可変操作の詳細については、SS64's SYNTAX section、具体的にはvariablesdelayed expansion、およびsubstringsのページを参照してください。

  3. LotPingsのおかげで)サブルーチンを保護してください。エントリポイントの直前に無条件でGOTOを入れて実行がルーチンに落ちないようにします。

関連する問題