问题 如何从C#windows窗体应用程序执行.bat文件?


我需要做的是让C#2005 GUI应用程序根据用户的请求调用.bat和几个VBScript文件。这只是一个止损解决方案,直到假期结束,我可以用C#写出来。我可以毫无问题地执行VBScript文件但我无法执行.bat文件。当我在C#应用程序中“单击”执行.bat文件时,DOS窗口打开并关闭非常快,测试.bat文件不执行 - “Windows无法识别bat作为内部或外部命令”是错误在DOS框中返回。如果我只是双击.bat文件或从命令提示符手动运行它确实执行。除非需要用户交互,否则我还需要静默执行.bat文件 - 此脚本将11k +文件复制到联网计算机上的文件夹中,如果目标是文件或目录,则偶尔Windows“忘记”并要求用户告诉它它是什么(这是另一个问题,不在这里讨论......不用说我很生气)。

到目前为止,在我的C#源码中我有这个:

Process scriptProc = new Process();


        if (File.Exists("c:\\scripts\\batchfile1.bat"))
        {

            scriptProc.StartInfo.FileName = @"cscript";
            scriptProc.StartInfo.Arguments = ("cmd.exe", "/C C:\\scripts\\batchfile1.bat"); // Wacky psuedo code //
            scriptProc.Start();
            scriptProc.WaitForExit(1500000);
            scriptProc.Close();

        }

        if (!File.Exists("c:\\scripts\\batchfile1.bat"))
        {
        }

我知道这段代码不起作用 - 但它本质上是我想要它做的。对于.bat文件,我正在看的是这样的。我假设我必须告诉系统使用cmd来运行.bat。我不知道该怎么做。我查过了这个 现场 适用于C#2003。对我来说没什么用,因为我对C#非常环保。

编辑:使用凯文的帖子我再次尝试。来自该帖子的相同解决方案脚本,但为我修改,因为我不需要重定向:

 System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo.FileName = "C:\\scripts\\batchfile1.bat";
            proc.StartInfo.RedirectStandardError = false;
            proc.StartInfo.RedirectStandardOutput = false;
            proc.StartInfo.UseShellExecute = false;
            proc.Start();
            proc.WaitForExit();

4967
2017-12-26 17:39


起源



答案:


这是你在找什么:

调用批处理文件后,服​​务在WaitForExit处挂起

这是关于服务无法执行文件的问题,但它显示了执行此操作所需的所有代码。


11
2017-12-26 17:41



好吧,这似乎更像。我会尝试这个。补充工具栏 - 曾经希望MS的编程语言有更长的名字吗?谷歌搜索“C#”“。bat”是徒劳的。 - wergeld


答案:


这是你在找什么:

调用批处理文件后,服​​务在WaitForExit处挂起

这是关于服务无法执行文件的问题,但它显示了执行此操作所需的所有代码。


11
2017-12-26 17:41



好吧,这似乎更像。我会尝试这个。补充工具栏 - 曾经希望MS的编程语言有更长的名字吗?谷歌搜索“C#”“。bat”是徒劳的。 - wergeld


对于您遇到的批处理文件问题,询问用户目的地是文件夹还是文件,如果您事先知道答案,则可以这样做:

如果destination是文件: echo f | [批处理文件路径]

如果文件夹: echo d | [批处理文件路径]

它基本上只是将“echo”后的字母输出到批处理文件的输入。


0
2018-03-09 16:55