【发布时间】:2022-01-03 04:09:31
【问题描述】:
我正在尝试找出一种在 for 命令中返回 if then 语句的方法,这是目前的代码:
我们有一个名为:File.cfg 的文件,其中包含多个数字(不超过 6 个数字):
1
3
4
6
2
5
将这些数字设置为变量:
setlocal enabledelayed expansion
setlocal
set /a count=1
for /F "usebackq delims=" %%a in ( File.cfg ) do (
set line!count!=%%a
set /a count+=1
)
然后尝试执行返回 if then 操作:
set /a count=0
echo 1 > list.txt
:Loop
set /a count+=1
echo %count% > list.txt
FOR /F "usebackq delims= " %%a in (list.txt) do (
echo !line%%a!
if %%a==7 goto :eof
if !line%%a!==1 goto 1
if !line%%a!==2 goto 2
if !line%%a!==3 goto 3
if !line%%a!==4 goto 4
if !line%%a!==5 goto 5
if !line%%a!==6 goto 6
)
goto #的示例
:1
code
code
code
goto loop
虽然最终批处理程序过早结束,主要是在计数 1 处。
最终输出结果:
( echo !line1!
if 1 == 7 goto :eof
if !line1! == 1 goto 1
if !line1! == 2 goto 2
if !line1! == 3 goto 3
if !line1! == 4 goto 4
if !line1! == 5 goto 5
if !line1! == 6 goto 6
)
1
【问题讨论】:
-
我们是否应该假设您启用了延迟扩展。您在问题中提供的所有代码都应该是minimal reproducible example,以便其他人可以复制它。
-
而不是
goto(设计上没有“返回”),使用call。见call /? -
@Squashman 是的,忘了说。
-
每个
goto都会打破循环。这意味着,第一个goto被执行,然后就没有循环了。如果您gotoup (在循环之前),则循环再次开始 - 通过再次从头开始读取文件。如果要处理的不仅仅是文件的第一行,则不能使用goto。 (看,@Squashman 在他的回答中做了什么)
标签: for-loop batch-file