2017-09-13 89 views
1

這是我的第一個問題,請裸機。cmd腳本,如何將令牌變量(例如%% a)傳遞給一個調用

服務器列表= ABC,DEF,XYZ,...... 每個這些項目我要找到另一個逗號分隔列表B =蘋果,球,貓...

我有,有一個批處理腳本嵌套循環後者執行以下步驟

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:

--------------------------------------------- 
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 
-------- 

我需要得到的b完整列表中:header到理線更進一步。 截至目前,我只是在通話中獲得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 expansionsubstrings上的頁面。

  3. (感謝LotPings)保護你的子程序;緊接在入口點之前,將無條件的GOTO阻止執行從「落入」例程。

相關問題