SET CLIENTS=blah1:blah2
for %%x in (%CLIENTS::= %) do (
SET client=%%x
echo %client%;
if "%1"==%client% goto end
)
:end
最初に blah1 と %1 を比較し、次に blah2 と %2 を比較することを期待します。ただし、%client% には blah2 のみが割り当てられます。この問題を解決する方法はありますか?
SET CLIENTS=blah1:blah2
for %%x in (%CLIENTS::= %) do (
SET client=%%x
echo %client%;
if "%1"==%client% goto end
)
:end
最初に blah1 と %1 を比較し、次に blah2 と %2 を比較することを期待します。ただし、%client% には blah2 のみが割り当てられます。この問題を解決する方法はありますか?
FOR
ループ内で変数を展開するには、遅延展開を有効にして、解析時に展開するのではなく、実行時に変数を強制的に展開する必要があります。詳細HELP SET
については、こちらをお読みください。
そして、コードを次のように変更してみてください
@echo off
setlocal enabledelayedexpansion
SET CLIENTS=blah1:blah2
set CLIENTS=%CLIENTS::= %
for %%x in (%CLIENTS%) do (
SET client=%%x
echo !client!;
if "%1"=="!client!" goto end
)
:end
変数は、!client!
ではなく、わずかに異なる構文で参照されることに注意してください%client%
。遅延環境変数展開では、別の文字 (感嘆符) を使用して、実行時に環境変数を展開できます。