2012-04-17 14 views
2

我试图令牌传递给子程序批量脚本 -批处理脚本 - 调用子程序每个令牌

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

+0

@Mat。感谢您的编辑。下次会这样做。 – liv2luv 2012-04-17 18:46:26

回答

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

谢谢。这工作。 2后续问题: 1.将%devices%作为参数传递给host1 host2时,FOR执行3次 - 可能是因为回车?这怎么可以避免? 2.作为脚本的一部分生成一些临时文件,因为代码命中“goto:eof”,清理没有发生。如何只在执行最后一个令牌后清理文件? 再次感谢。 – liv2luv 2012-04-18 13:25:41

+0

在for之后进行清理。至于1.,请确保你的变量是干净的,或者在'sendReq'中跳过无效输入。 (或使用另一种脚本语言:)) – Mat 2012-04-19 04:20:15

+0

太棒了!谢谢马特。这正如现在一样。 – liv2luv 2012-04-20 00:37:05