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%
. 延迟环境变量扩展允许您在执行时使用不同的字符(感叹号)来扩展环境变量。