gpt4 book ai didi

windows - 批处理脚本在 for 循环后结束

转载 作者:可可西里 更新时间:2023-11-01 10:05:22 55 4
gpt4 key购买 nike

我有一个批处理文件,它执行一个程序以及顺序(编号)宏,并调用另一个批处理文件来监视它何时完成,然后开始下一次迭代。启动程序时我无法使用 Start/wait 或其他“排序”命令,因为它是使用我无法避免使用的批处理文件和语法启动的。一旦这个循环完成(对于典型的使用模式,在程序打开和关闭约 120 次之后),我需要再次打开它并运行一个不同的、非顺序的宏,但是一旦循环完成它就会失败。

for /l %%x in (1,1,120) do (
echo %%x

"C:\File Path\ProgramStart.bat" -macro "C:\File Path\MyScript%%x.txt"
timeout 3
start /wait OpenChecker.bat )

"C:\File Path\ProgramStart.bat" -macro "C:\File Path\AnotherScript.txt"

为了完整起见,这里是 OpenChecker.bat:

:check
tasklist /FI "IMAGENAME eq Program.exe" 2>NUL | find /I /N "Program.exe">NUL
if "%ERRORLEVEL%" NEQ "0" exit
TIMEOUT 5
goto check

尽管我尝试了所有变体(包括寻找适用于特别挑剔的程序的方法以及每个批处理文件中语法的更改),但我似乎无法获得运行 AnotherScript 的程序实例(或与此相关的任何其他东西)运行。谢谢。

最佳答案

一般情况下,当一个批处理文件调用另一个批处理文件时,流程执行会转移到被调用的批处理中,不会返回给调用者。为了让调用者检索执行流程,需要使用call命令。

for /l %%x in (1,1,120) do (
echo %%x
call "C:\File Path\ProgramStart.bat" -macro "C:\File Path\MyScript%%x.txt"
timeout 3
call OpenChecker.bat
)

call "C:\File Path\ProgramStart.bat" -macro "C:\File Path\AnotherScript.txt"

注意:这样问题就解决了,但是还有一个问题。如果流转了,没有返回给调用者,为什么循环用原来的代码迭代了120次?

for 循环已被解析并正在执行。发生的情况是,当 ProgramStart.bat 被调用时,会生成一个新的批处理“context”并替换调用者“context”,但是 for 命令仍在内存中执行。它被解析并开始仅作为一个命令执行。当ProgramStart.bat结束时,“context”被丢弃,但是内存中的for命令还在执行,只是现在不在一个batch“context”里面(原始的和被调用的“上下文”都被丢弃了),但在命令行上下文中。

关于windows - 批处理脚本在 for 循环后结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30857165/

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