【发布时间】:2017-04-23 16:22:27
【问题描述】:
如何从单个批处理文件中并行执行一组批处理文件并从每个批处理文件中获取退出代码。当我使用 start 它并行执行批处理文件(新的 cmd 窗口),但不从每个返回退出代码。在使用调用时,我可以获得退出代码,但批处理文件执行是按顺序发生的。我有以下代码:
ECHO ON
setlocal EnableDelayedExpansion
sqlcmd -S server_name -E -i select_code.sql >\path\output.txt
for /f "skip=2 tokens=1-3 delims= " %%a in ('findstr /v /c:"-" \path\output.txt') do (
echo $$src=%%a>\path1\%%c.prm
echo $$trg=%%b>>\path1\%%c.prm
set param_name=%%c
start cmd \k \path\exec_pmcmd_ctrm.bat workflow_name %%param_name%%
ping 1.1.1.1 -n 1 -w 5000 > nul
set exitcode="%V_EXITCODE%"
echo %exitcode%>>\path\exitcode.txt
)
这将使用不同的变量并行执行 exec_pmcmd_ctrm.bat 3 次,但我无法从每次执行中获取退出代码。我尝试使用 call 但后来我错过了 bat 文件的并行执行。在这方面有什么帮助吗?
【问题讨论】:
-
您需要另一种方法来收集退出代码。如果您使用 start 异步运行程序,则没有单点可以接收退出代码。我清楚地记得 Frank P. Westlake 使用 NamedPipes/MailSlots 编写的一个工具,它可以用于此目的。它是免费的,但我不知道它是否仍然可以下载。 msdn:About Mailslots
-
你从哪里得到的
%V_EXITCODE%?
标签: windows batch-file cmd parallel-processing