2017-09-13 110 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阻止执行从“落入”例程。

相关问题