File 我怎样才能用球拍打圈呢
我想循环这些来输出某物File 我怎样才能用球拍打圈呢,file,loops,batch-file,for-loop,File,Loops,Batch File,For Loop,我想循环这些来输出某物 @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 在我得到“帮助”之后 当然,它不起作用。它输出以下内容: yyynny yyynny yyynny yyynny yyynny 我怎样才能解决这个问题?提前感谢。在FOR循环中展开变量
@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
在我得到“帮助”之后
当然,它不起作用。它输出以下内容:
yyynny
yyynny
yyynny
yyynny
yyynny
我怎样才能解决这个问题?提前感谢。在
FOR
循环中展开变量需要启用延迟展开以强制变量在运行时展开,而不是在解析时展开
试一试
请注意,引用变量时使用的语法略有不同
!啊代码>而不是%ans%
FOR
循环的内部变量的扩展需要启用延迟扩展以强制变量在运行时展开,而不是在解析时展开
试一试
请注意,引用变量时使用的语法略有不同!啊代码>而不是%ans%
不使用延迟扩展的备选方案:
set ans=yyynny
for /l %%i in (0,1,5) do (call echo %%ans:~%%i,1%%)
不使用延迟扩展的备选方案:
set ans=yyynny
for /l %%i in (0,1,5) do (call echo %%ans:~%%i,1%%)
虽然延迟扩展有帮助,但这只是因为它允许使用其他变量表示法,所以表达式是明确的。在这里,扩展时间不是一个因素%ans:~%%i,1%
的解析方式实际上与我们假设的不同,它被分成两个表达式:%ans:~%%
第一个表达式和%i,1%
第二个表达式。第一个是实际字符串,第二个为空,因此结果为空。解决方案是使用一个临时变量将任务分成两部分。但是,那就需要延迟扩展。你刚才试过切换吗!注意:
循环的内部变量的扩展不需要使用延迟扩展。如前所述,您还可以使用调用
,而延迟扩展有帮助,因为它允许使用其他变量表示法,所以表达式是明确的。在这里,扩展时间不是一个因素%ans:~%%i,1%
的解析方式实际上与我们假设的不同,它被分成两个表达式:%ans:~%%
第一个表达式和%i,1%
第二个表达式。第一个是实际字符串,第二个为空,因此结果为空。解决方案是使用一个临时变量将任务分成两部分。但是,那就需要延迟扩展。你刚才试过切换吗!注意:
循环的内部变量的扩展不需要使用延迟扩展。如前所述,您还可以使用call
如何知道“call”应该放在begining@KenTakLee对不起,我不明白你的问题。。。。。我在问为什么你知道你应该在(0,1,5)do中为/l%%i(调用echo%%ans:~%i,1%%)而不是在(0,1,5)do(echo%%ans:~%i,1%%)中为/l%%i(echo%%ans:~%i,1%%)@KenTakLee这只是一种按顺序(阶段)计算变量的方法,而不是一次计算所有变量once@KenTakLee不知道我在哪里看到了呼叫技巧,但是有很多有用的信息,类似的技巧包括:你怎么知道“call”应该放在begining@KenTakLee对不起,我不明白你的问题。。。。。我在问为什么你知道你应该在(0,1,5)do中为/l%%i(调用echo%%ans:~%i,1%%)而不是在(0,1,5)do(echo%%ans:~%i,1%%)中为/l%%i(echo%%ans:~%i,1%%)@KenTakLee这只是一种按顺序(阶段)计算变量的方法,而不是一次计算所有变量once@KenTakLee不知道我在哪里看到了呼叫技巧,但是有很多有用的信息,类似的技术包括
set ans=yyynny
for /l %%i in (0,1,5) do (call echo %%ans:~%%i,1%%)