Batch file for循环中的命令行为不同(批处理文件)

Batch file for循环中的命令行为不同(批处理文件),batch-file,warnings,Batch File,Warnings,我正在批处理文件中运行一个命令[仅供参考:该命令运行一个python脚本,该脚本生成不同的输出] 代码如下: :meshfunc echo "starting command" echo "!inst_dir!runME.bat -parameter1 !parameter2! !parameter1v! -script pythonscript.py" echo start_time=!time! for /F "delims=" %%i IN ('"!inst_dir!runME.bat -

我正在批处理文件中运行一个命令[仅供参考:该命令运行一个python脚本,该脚本生成不同的输出] 代码如下:

:meshfunc
echo "starting command"
echo "!inst_dir!runME.bat -parameter1 !parameter2! !parameter1v! -script pythonscript.py"
echo start_time=!time!
for /F "delims=" %%i IN ('"!inst_dir!runME.bat -parameter1 !parameter2! !parameter1v! -script pythonscript.py"') DO (
    set cmdline=%%i
    echo currentENDline=!cmdline!
)
EXIT /B 0
脚本的输出为:

PS:我剥离输出线的原因很明显,但它们在这里不重要

所以我的问题是: 如果我在没有for循环的情况下运行相同的命令,它可能会在30秒内完成,而不会在最后发出警告。 但是,如果我在for循环中运行它,则需要更长的时间(大约3分钟),并在最后给出警告
为什么我会在最后收到警告,如图所示。为什么会发生这种情况?

因为
for/F
执行括号中的命令,并将其所有输出存储在临时磁盘文件中,直到命令结束;之后,它开始重复执行这组命令。这样,如果输出非常大,临时文件需要增长几倍,这样的过程需要一些时间。。。将输出重定向到磁盘文件,然后使用
for/F
处理这样的文件应该更快:

:meshfunc
echo "starting command"
echo "!inst_dir!runME.bat -parameter1 !parameter2! !parameter1v! -script pythonscript.py"
echo start_time=!time!
call "!inst_dir!runME.bat" -parameter1 !parameter2! !parameter1v! -script pythonscript.py > output.txt
for /F "delims=" %%i IN (output.txt) DO (
    set cmdline=%%i
    echo currentENDline=!cmdline!
)
EXIT /B 0

我建议对
runME.bat
使用
CALL
。我试过了。在这种情况下,发生的情况是终端在调用该命令后无限卡住…命令完成了,但它仍然无限卡住了那一行谢谢。它回答了我的问题。我已经厌倦了登录临时文件。问题是我无法使用它本例中出现“文件访问被拒绝”错误。[奇怪的是,我注意到只有当我刷新/访问临时日志文件所在的文件夹时,才会刷新输出。但这一部分不确定。因此我完全放弃了将输出记录到临时文件的想法]如何确保在后续脚本开始访问临时日志文件之前,将命令的整个输出刷新到临时日志文件中(此处脚本完成的时间不同..取决于任务..时间从分钟到一整天不等)–嗯,这是一个完全不同的问题,所以我建议你为它发布一个新问题…我可以请你接受这个答案吗?对不起?这是完成相同任务的替代方法的部分答案。仅供参考:requote-“…我已经厌倦了登录临时。。。“。注意‘had’。没有不愉快的感觉,但正如你所说的——如果这是答案,我今天问的主要问题今天就不会被我问了。够清楚吗?恐怕我不明白你最后的评论。我想问题很清楚:为什么一个命令在30秒内完成要花更长的时间,大约3分钟,当它在
for/F
循环中执行时?我的答案也很清楚。我不明白你是不想回答这个问题,还是想回答一个未发布的问题。对不起,我不是一个读心术的人<代码>:/好吧,我必须承认我的帖子第一篇帖子(问题)没有“明确”要求解决方案以避免警告(以及3分钟的等待时间,而不是正常的30秒脚本工作),因为我相信完整的答案在于“解决方案”,而不仅仅是原因。抱歉,既然我们已经完成了答案中的原因部分,那么我们能得到解决方案部分吗?