我正在编写一个运行批处理文件的程序,并且需要在程序中进一步输出。这是我的C#代码:
public void ExecuteBatFile()
{
Process proc = null;
try
{
string targetDir = string.Format("C:\\Users"); //this is where mybatch.bat lies
proc = new Process();
proc.StartInfo.WorkingDirectory = targetDir;
proc.StartInfo.FileName = "batch.bat";
proc.StartInfo.Arguments = string.Format("10"); //this is argument
proc.StartInfo.CreateNoWindow = false;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; //this is for hiding the cmd window...so execution will happen in back ground.
proc.Start();
string output = proc.StandardOutput.ReadToEnd();
Console.WriteLine(output);
proc.WaitForExit();
}
catch (Exception ex)
{
Console.WriteLine("Exception Occurred :{0},{1}", ex.Message, ex.StackTrace.ToString());
}
}
}
一旦我跑了,我得到了这个错误:
抛出异常:System.dll中的“System.InvalidOperationException” 发生异常:未重定向StandardOut或进程 尚未开始。,at System.Diagnostics.Process.get_StandardOutput()at CefSharp.MinimalExample.Wpf.CallBatchFile.ExecuteBatFile()in C:\ Users \用户CefSharp.MinimalExamplemaster \ CefSharp.MinimalExample.Wpf \ CallBatchFile.cs:线 27
批处理文件成功运行,但后来我无法将结果存储到变量中。无论如何我无法让它工作。有没有人有任何建议? 这是我的moch批次:
@echo off
cd C:\users\934874
echo.>silvio.txt
title This is your first batch script!
echo Welcome to batch scripting!
if "%errorlevel%"=="0" cls &Echo Success.
if "%errorlevel%"=="1" cls &Echo Fail
pause
我期望的输出是在控制台上成功/失败,并将其作为字符串存储到变量中。 在此先感谢您的帮助
答案 0 :(得分:1)
需要重定向输出
proc.StartInfo.RedirectStandardOutput = true;
当UseShellExecute为false时,不使用WorkingDirectory属性来查找可执行文件。相反,它仅由启动的进程使用,并且仅在新进程的上下文中具有意义。当UseShellExecute为false时,FileName属性可以是可执行文件的完全限定路径,也可以是系统将尝试在PATH环境变量指定的文件夹中查找的简单可执行文件名。
答案 1 :(得分:0)
最简单的方法之一是让批处理文件将其输出写入文本文件。然后您的主程序可以在批处理完成后读取文本文件。
如果您真的想从标准输出流中读取,请查看其他SO帖子: Capturing console output from a .NET application (C#)