Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 我怎样才能用球拍打圈呢_File_Loops_Batch File_For Loop - Fatal编程技术网

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%%)