如何在C# Windows表单应用程序中执行.bat文件?

11

我需要做的是让一个C# 2005 GUI应用程序在用户请求时调用一个.bat文件和几个VBScript文件,这只是一种临时解决方案,直到放假结束我才能用C#编写所有内容。我可以轻松执行VBScript文件,但无法执行.bat文件。当我在C#应用程序中“点击”执行.bat文件时,会打开一个DOS窗口并迅速关闭,测试.bat文件不会执行 - 在DOS框中返回错误“Windows不认识bat作为内部或外部命令”。如果我只是双击.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#非常陌生。

编辑:使用Kevin的帖子后,我再次尝试了一下。从那篇文章中得到了相同的解决方案脚本,但针对我的情况进行了修改,因为我不需要重定向:

 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();
2个回答

11

3
好的,这似乎更符合要求。我会尝试这个。 侧边栏 - 你是否曾经希望微软的编程语言有更长的名字?在谷歌搜索 "C#" ".bat" 是极其无效的。 - wergeld

0

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

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

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

这实际上只是将“echo”后面的字母传输到批处理文件的输入中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接