2011-03-10 92 views
0

我想要使用批處理腳本基於空格分隔的計算機名稱列表動態地創建和分配變量。批處理腳本 - 基於輸入創建變量

將計算機名稱分配給%hosts%(這是從生產腳本中的另一個文件中提取的)。我試圖完成的是計算被拉入的主機數量(它們用空格分隔),然後將每個主機分配給一個變量,該變量包含與主機列出的順序相關的數字。

這裏是代碼片段:

@echo off 
setlocal EnableDelayedExpansion 

SET hosts=10.10.0.0 192.168.0.0 W2K3-Server 
SET /a counter=0 

FOR %%I IN (%hosts%) DO (
    SET /a counter+=1 
) 

echo Total= !counter! 

FOR /L %%A IN (1,1,!counter!) DO (
    FOR %%I in (%hosts%) DO (
     IF [!host%%A!]==[] SET host%%A=%%I 
     echo host%%A= !host%%A! 
    ) 
) 

endlocal 

這個腳本的輸出是:

Total= 3 
host1= 10.10.0.0 
host1= 10.10.0.0 
host1= 10.10.0.0 
host2= 10.10.0.0 
host2= 10.10.0.0 
host2= 10.10.0.0 
host3= 10.10.0.0 
host3= 10.10.0.0 
host3= 10.10.0.0 

我想看到的結果是:

Total= 3 
host1= 10.10.0.0 
host2= 192.168.0.0 
host3= W2K3-Server 

我知道爲什麼我得到了第一個結果。沒有檢查是否滿足條件。在這種情況下,條件是將其中一個主機設置爲變量。一旦設置了變量,我需要知道如何退出循環中「FOR %% I in(%hosts%)」部分。

這是可能的批處理?這件作品對於我正在研究的項目並不重要,但它會通過在劇本的其他方面開闢一些新的可能性而增加價值。

回答

2

喜歡這個?

@echo off 
setlocal EnableDelayedExpansion 

SET hosts=10.10.0.0 192.168.0.0 W2K3-Server 
SET /a counter=0 

FOR %%I IN (%hosts%) DO (
    SET /a counter+=1 
    IF [!host%%I!]==[] SET host!counter!=%%I 
) 

echo Total= !counter! 

FOR /L %%A IN (1,1,!counter!) DO (
    echo host%%A= !host%%A! 
) 

endlocal 
+0

真棒這個作品。謝謝! – 2011-03-10 17:51:34

2

試試這個

@echo off 
setlocal EnableDelayedExpansion 

SET hosts=10.10.0.0 192.168.0.0 W2K3-Server 
SET /a counter=0 

FOR %%I IN (%hosts%) DO (
    SET /a counter+=1 
    set host!counter!=%%I 
) 

echo Total= !counter! 

FOR /L %%A IN (1,1,!counter!) DO (
    echo host%%A = !host%%A! 
) 

endlocal 
+0

這個答案與喬治的答案大致相同,並且非常接近相同的代碼。感謝您花時間來幫忙! – 2011-03-10 17:55:16