如何包含批处理文件命令?

时间:2014-06-17 14:55:51

标签: c# batch-file

我有以下代码调用并执行批处理文件

System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = @"C:\tS\comm.bat";
proc.StartInfo.RedirectStandardError = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
string strGetInfo = proc.StandardOutput.ReadToEnd();
strCMDOut = strGetInfo.Substring(strGetInfo.Length - 5, 3);
//MessageBox.Show(cmdOut);
proc.WaitForExit();

comm.bat文件包含以下内容,

@ECHO ON
java com.test.this send

如何将其合并到我的C#代码中并防止任何文件问题,而不是调用文件来执行bat文件? (我需要将输出保存到字符串中,因为它已经在上面的代码中执行了。)

另外,我如何以静默方式进行操作,因此用户看不到CMD窗口并且操作是在后台进行的?

我用以下代码替换了代码:

var proc = new Process
{
    StartInfo = new ProcessStartInfo
    {
        FileName = "cmd.exe",
        Arguments = "java com.test.this send",
        RedirectStandardError = false,
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = true
    }
};
proc.Start();
string strGetInfo = proc.StandardOutput.ReadToEnd();
strCMDOut = strGetInfo.Substring(strGetInfo.Length - 5, 3);
MessageBox.Show(strCMDOut);

我在消息框中输入.,而不是原始代码显示的代码。

2 个答案:

答案 0 :(得分:2)

可能足以:

var pro = Process.Start("java", "com.test.this send");

考虑到你有@ECHO ON,我认为你想要读取进程的输出(如果它从内部重定向)。

阅读:Process.start: how to get the output?

如果这不是您所要求的,请澄清。

答案 1 :(得分:1)

关于, 我如何静默地执行此操作,因此用户没有看到CMD窗口并且操作是在后台进行的?

您可以通过设置ProcessStartInfo的此属性来禁止新窗口。

CreateNoWindow = true