在Windows Batch for Loop中运行可执行文件时,如何打印输出?

时间:2019-10-17 20:40:12

标签: windows batch-file

我正在使用for循环执行另一个可执行文件并捕获输出。输出是一组变量,例如

Name=Jim
Address=1234 Main Ave
Phone=425-555-0202

但是,此可执行文件需要相当长的时间才能运行。我正在通过以下方式捕获输出并设置环境变量:

for /f "tokens=*" %%a in ('fetch.exe <options>') do (
    echo "%%a"
    set "%%a"
)

这很好,但是,如果fetch.exe需要120秒才能运行,则该循环的回显部分要等到120秒后该过程完成后才能运行。一个简单的测试是创建一个批处理文件,例如

@echo 1
@echo 2
@echo 3
@echo 4
timeout /t 30

然后从命令行通过for /f "tokens=*" %a in ('call test.cmd') do (@echo "%a")调用

30秒内您将看不到任何输出。

如何立即开始查看正在执行的命令的输出?

1 个答案:

答案 0 :(得分:1)

如前所述,Parallel.ForEach( methods , ( currentMethod ) => currentMethod.Invoke() ); 无法处理此问题,因为它等待被调用命令的完成。

但是您可以使用异步模式来实现它。
生产者在其自己的线程中工作。

FOR /F