gpt4 book ai didi

windows - FOR 循环内的 WHILE 循环批量

转载 作者:可可西里 更新时间:2023-11-01 14:42:03 25 4
gpt4 key购买 nike

我见过其他解决此问题的部分 的问题,但我没有看到可以解决整个问题的解决方案。在命令处理器中当然没有诸如“while”之类的东西,并且由于 goto :line 语句会跳出所有循环,因此它不是在特定持续时间之前迭代某些值集的选项继续下一个值。

这是我要实现的逻辑流程的伪代码;到目前为止,命令处理器挫败了我让它运行的尝试。您将如何构建它(除了放弃批处理脚本并转而使用 c# 或其他东西)?

伪代码:

SET %%durationMinutes=60
FOR %%X IN (10 20 40 80 160 200 0) DO (
:: calculate elapsed minutes...
WHILE %elapsedMinutes < %%durationMinutes DO (
:: unrelated hocus pocus here, uses %%X as a variable
call :foo %%X
// can't use goto to simulate the WHILE loop since it breaks %%X, so...?
)
)

最佳答案

这个问题有两个方面。首先,goto 会破坏任何嵌套的 IF/FOR 命令,但也许更重要的是使用 goto 组装的 While 非常慢。一种解决方案是用无限循环模拟一段时间:for/L %%i in () do ... 并通过子例程中的 goto 中断它。此解决方案的问题是 for/L 不能用 goto 在相同的 cmd.exe 上下文中 中断。因此,解决方案是调用一个新的 cmd.exe 来执行 While。

在新的cmd.exe中执行的Batch文件可能是同一个caller文件,所以我们需要在同一个Batch文件中通过特殊参数来控制While的执行。此外,我们可以使用辅助变量来使所有这些东西更清楚。在这里:

@echo off
setlocal EnableDelayedExpansion

rem While dispatcher
if "%1" equ "While" goto %2

rem Definition of auxiliary variables
set While=for /L %%a in () do if
set Do=(
set EndW=) else exit
set RunWhile=cmd /Q /C "%0" While

echo Example of While
echo/
goto RunMyWhile

rem Write the While code here
:MyWhile
set /A i=0, num=0
set /P "num=Enter number: "
%While% !num! gtr 0 %Do%
set /A i+=1
echo !i!- Number processed: !num!
echo/
set num=0
set /P "num=Enter number: "
%EndW% !i!

rem Execute the While here
:RunMyWhile
%RunWhile% MyWhile
set i=%errorlevel%
echo/
echo While processed %i% elements

如您所见,While 可能会通过 ERRORLEVEL 将数字结果返回给调用者代码。

在您的特定情况下:

SET durationMinutes=60
goto RunMyWhile

:MyWhile
:: calculate elapsed minutes...
%WHILE% !elapsedMinutes! < %durationMinutes% %DO%
:: unrelated hocus pocus here, uses %3 as a variable
call :foo %3
:: calculate elapsed minutes again...
%EndW%

:RunMyWhile
FOR %%X IN (10 20 40 80 160 200 0) DO (
%RunWhile% MyWhile %%X
)

此主题在 this post 中有详细解释。

关于windows - FOR 循环内的 WHILE 循环批量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11270679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com