2012-04-17 15 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