【问题标题】:Batch: How to do returning if then statements in for command?批处理:如何在 for 命令中返回 if then 语句?
【发布时间】: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 被执行,然后就没有循环了。如果您 goto up (在循环之前),则循环再次开始 - 通过再次从头开始读取文件。如果要处理的不仅仅是文件的第一行,则不能使用goto。 (看,@Squashman 在他的回答中做了什么)

标签: for-loop batch-file


【解决方案1】:

除非您尝试对某事进行概念验证,否则不确定您为什么拥有复杂的代码。以我的经验,实现您想要的结果的最简单方法就是这样做。

@echo off

for /F "usebackq delims=" %%a in ("File.cfg") do CALL :%%a

REM END OF MAIN Functions below
GOTO :EOF

:1
ECHO IN 1
GOTO :EOF

:2
ECHO IN 2
GOTO :EOF

REM Shortened for brevity

上面的代码会输出

IN 1
IN 3
IN 4
IN 6
IN 2
IN 5

如果你真的想使用数组变量,那么最简单的解决方案就是下面的代码。

@echo off

setlocal enabledelayedexpansion

set "count=0"
for /F "usebackq delims=" %%a in ("File.cfg") do (
    set /a "count+=1"
    set "line!count!=%%a"
)

FOR /L %%G IN (1,1,%count%) DO CALL :!line%%G!

REM END OF MAIN Functions below
GOTO :EOF

:1
ECHO IN 1
GOTO :EOF

:2
ECHO IN 2
GOTO :EOF

REM Shortened for brevity 

上述代码也会输出

IN 1
IN 3
IN 4
IN 6
IN 2
IN 5

【讨论】:

  • 这行得通,谢谢你也简化了它。
猜你喜欢
  • 2021-06-14
  • 1970-01-01
  • 2020-09-19
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
相关资源
最近更新 更多