使用各种参数在C#中从cmd.exe运行.bat文件

时间:2018-06-20 19:37:27

标签: c# .net batch-file cmd process

我整天都在尝试启动将运行以下代码的过程:

C:\bin\ant.bat -f=C:\build.xml -DinputFile=C:\Desktop\Book1.xml -DstartDate=2018-06-20 -DxslFile=ProcessingDate -DoutputFile=fff

它在cmd中完全正常。

这是我最后用C#编写的代码,我真的希望它能起作用,但是却没有:

public void run() {
        string antFile = @"C:\ant.bat";
        string build = @"C:\build.xml";
        string inputFile = @"C:\Book1.xml";
        string startDate = "2018-05-23";
        string outputFile = "ff";
        ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd.exe", "/c" + @"C:bin\ant.bat -f=C:\build.xml -DinputFile=C:\Desktop\Book1.xml -DstartDate=2018-06-20 -DxslFile=ProcessingDate -DoutputFile=test0.xsl");
        Process proc = new Process();
        proc.StartInfo = procStartInfo;
        proc.Start();

        ProcessStartInfo procStartInfo2 = new ProcessStartInfo("cmd.exe", "/c" + antFile + "-f=" + build + "-DinputFile=" + inputFile + "-DstartDate=" + startDate + "-DxslFile=" + startDate + "-DoutputFile=" + outputFile);
        Process proc2 = new Process();
        proc2.StartInfo = procStartInfo2;
        proc2.Start();
    }

首先,我尝试将cmd中的所有内容都放入流程中,但是在尝试执行我实际上必须要做的事情后,它没有用:将所有字符串值都作为参数,但没有也不行。

相反,我收到了一堆异常first image

second img

我整天坐在那里,这使我失去了选择的余地。有谁知道这可能是什么问题?

更新:

我设法运行了startInfo3进程。但是startInfo4仍然无效。我已经检查了两行似乎产生相同的结果,所以如果它们相同则出了什么问题。我会错误地传递它们吗?

           ProcessStartInfo startInfo3 = new ProcessStartInfo();
            startInfo3.FileName = "cmd.exe";
            startInfo3.Arguments = "/c" + @"C:\ant.bat -f=C:\build.xml -DinputFile=C:\Book1.xml -DstartDate=2018-06-20 -DxslFile=ProcessingDate -DoutputFile=fff";
            Process.Start(startInfo3);

            ProcessStartInfo startInfo4 = new ProcessStartInfo();
            startInfo4.FileName = "cmd.exe";
            startInfo4.Arguments = "/c" + antFile + "-f=" + build + "-DinputFile=" + inputFile + "-DstartDate=" + startDate + "-DxslFile=" + startDate + "-DoutputFile=" + outputFile;
            Process.Start(startInfo4);

1 个答案:

答案 0 :(得分:0)

深入研究之后,我找到了答案:

ProcessStartInfo procStartInfo5 = new ProcessStartInfo();
            procStartInfo5.FileName = "cmd.exe";
            procStartInfo5.Arguments = $"/c{antFile} -f={build} -DinputFile={inputFile} -DstartDate={startDate} -DxslFile=ProcessingDate -DoutputFile={outputFile}";
            Process.Start(procStartInfo5);

希望它对某人有帮助!