我想通过使用C#代码执行BAT文件。
我尝试使用以下代码
Process aProcess = new Process();
aProcess = Process.Start(@"E:\IMP_DATA\PRC_Helper_uTest.bat");
aProcess.WaitForExit(24000);
aProcess.Close();
它启动批处理文件,但下一秒停止。
我无法看到任何东西。
有人可以帮我解决这个问题吗?
更新
实际上我想启动一个新的命令提示符并在新创建的命令提示符上运行批处理文件。
我怎么能实现这个目标?
答案 0 :(得分:5)
以下是一些可能有所不同的代码,设置进程不使用“aProcess.UseShellExecute = false”启动shell;然后使用
将输出重定向到流 aProcess.RedirectStandardError = true;
aProcess.RedirectStandardOutput = true;
string Results = aProcess.StandardOutput.ReadToEnd();
这应该返回批处理文件将显示的输出
答案 1 :(得分:3)
在.bat文件的末尾添加PAUSE?
答案 2 :(得分:1)
正如您在更新中所写的那样,您希望在此提示符下启动新的命令提示符并启动批处理文件。但是你做了什么,就是开始批处理文件。
为了使其工作,启动命令提示符,执行批处理文件而不是执行批处理文件(有时它可以这么简单; - ))。
示例:
private void StartCmdWithBatch(string nameOfBatchFile)
{
if (!File.Exists(nameOfBatchFile))
throw new FileNotFoundException(nameOfBatchFile);
string parameters = String.Format("/k \"{0}\"", nameOfBatchFile);
System.Diagnostics.Process.Start("cmd", parameters);
}
有关命令提示符选项的更多信息可以通过cmd /?
答案 3 :(得分:0)
您是否希望在批处理文件执行后命令提示符保持打开状态?如果是这样,那么以批处理文件作为参数启动“cmd.exe”,否则只需在批处理文件的末尾添加一个暂停命令,如前所述。
最好的问候
答案 4 :(得分:0)
我在这个bat文件中使用了两个C#代码:
@echo off
color 0a
mode 1000
:a
echo %random% %random% %random% %random% %random% %random% %random% %random%
goto a
Process aProcess = new Process();
aProcess = Process.Start(@"E:\IMP_DATA\PRC_Helper_uTest.bat");
aProcess.WaitForExit(24000);
aProcess.Close();
aProcess.RedirectStandardError = true;
aProcess.RedirectStandardOutput = true;
string Results = aProcess.StandardOutput.ReadToEnd();
它完美无缺。