0

我想循环这些以输出某事。

@echo off
set ans=yyynny
echo %ans:~0,1%
echo %ans:~1,1%
echo %ans:~2,1%
echo %ans:~3,1%
echo %ans:~4,1%
echo %ans:~5,1%
pause

输出:

y
y
y
n
n
y

在“帮助”之后,我得到了

set ans=yyynny
for /l %%i in (0,1,5) do (echo %ans:~%%i,1%)
pause

当然,它不起作用。它输出这些:

yyynny
yyynny
yyynny
yyynny
yyynny

我该如何解决这个问题?先感谢您。

4

2 回答 2

2

不使用延迟扩展的替代方案:

set ans=yyynny
for /l %%i in (0,1,5) do (call echo %%ans:~%%i,1%%)
于 2012-07-31T12:25:22.900 回答
1

循环内变量的扩展FOR需要您启用延迟扩展以强制变量在运行时扩展,而不是在解析时扩展。

尝试

@echo off
setlocal enabledelayedexpansion
set ans=yyynny
for /l %%i in (0,1,5) do (echo !ans:~%%i,1!)

请注意,该变量的引用语法略有不同!ans!,而不是 %ans%.

于 2012-07-31T05:48:46.400 回答