批处理脚本 - 为每个令牌调用子例程

时间:2012-04-17 18:37:28

标签: batch-file dos

我正在尝试将令牌传递给批处理脚本中的子例程 -

SET devices=host1 host2 host3
FOR /F "tokens=* delims=," %%G IN (%devices%) DO CALL :sendReq %%G

:sendReq

curl.exe http://%1:1234/service/monitor

GOTO :EOF

问题 - The system cannot find the file host1 - 错误消息不确定原因。

%1未解析为host1

1 个答案:

答案 0 :(得分:8)

for /f实际上是用于解析文本文件或命令,并一次解析整行。看看它产生了什么:

SET devices=host1 host2 host3
FOR /F "tokens=*" %%G IN ("%devices%") DO call :sendReq %%G %%H %%I
goto :EOF

:sendReq
echo Parm1: %1
echo Parm2: %2
echo Parm3: %3
GOTO :EOF

(即每个循环读取一整行,并将不同的标记分配给%G,然后%H%I%J,...取决于你实际拥有多少令牌。)

您只需要更简单的for版本:

SET devices=host1 host2 host3
FOR %%G IN (%devices%) DO call :sendReq %%G
goto :EOF

:sendReq
echo In sendReq: %1
GOTO :EOF