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

私はなぜ私が最初の結果を得ているのか知っています。条件が満たされているかどうかを確認するチェックはありません。この場合、条件はホストの1つを変数として設定することです。変数が設定されたら、ループの「FOR %% I in(%hosts%)」セクションから抜け出す方法を知る必要があります。

これはバッチで可能ですか?この作品は、私が取り組んでいるプロジェクトにとって重要ではありませんが、スクリプトの他の領域でいくつかの新しい可能性を開くことによって価値を追加します。

4

2 に答える 2