gpt4 book ai didi

C# 控制台调用批处理多个批处理文件

转载 作者:太空狗 更新时间:2023-10-29 23:12:59 25 4
gpt4 key购买 nike

在那里,我有两个批处理文件:BatchA.batBatchB.batBatchA.bat 正在调用 B1.batB2.batB3.bat 并运行这三个批处理文件同时(三个批处理文件的运行顺序无关紧要)。这是 BatchA.bat:

start B1.bat
start B2.bat
start B3.bat

BatchB.bat 正在调用 B4.batB5.batB6.bat 并运行同时运行三个批处理文件(三个批处理文件的运行顺序无关紧要)。这是 BatchB.bat:

start B4.bat
start B5.bat
start B6.bat

我正在使用 C# 控制台应用程序来调用 BatchA.batBatchB.bat,但我需要确保 BatchB.bat 成功'开始直到 BatchA.bat 如果完成。换句话说,在开始 BatchB 之前,我需要确保所有 B1.batB2.batB3.bat 都已完成.bat

这是 C# 代码:

proc.StartInfo.FileName = BatchA.bat;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.Start();
proc.WaitForExit();
int exitCode = proc.ExitCode;
proc.Close();
Console.WriteLine("Process Complete! exitCode: " + exitCode.ToString());

proc.StartInfo.FileName = BatchB.bat;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.Start();
proc.WaitForExit();
exitCode = proc.ExitCode;
proc.Close();
Console.WriteLine("Process Complete! exitCode: " + exitCode.ToString());

当我运行它时,所有 6 个批处理文件同时启动。如何确保 BatchA.bat 在所有三个小批处理文件都完成后才完成?

最佳答案

一个简单的方法是通过管道传输 start 命令。当子进程结束时,管道左边的部分会关闭,关闭完整的管道,继续执行批处理

因此,batchA.cmd 可以编码为

@echo off
setlocal enableextensions disabledelayedexpansion

echo starting BatchA
(
start "b1" cmd /c b1.cmd
start "b2" cmd /c b2.cmd
start "b3" cmd /c b3.cmd
) | more

echo BatchA has ended

注意:这种方法虽然简单,但有一个缺点(或没有,这取决于需要)。 b1...b3 启动的进程可以使管道保持事件状态。

@Squashman 已经发布了 code处理不等待从内部批处理文件启动的进程。

关于C# 控制台调用批处理多个批处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39980603/

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