【问题标题】:How to execute a .bat file from a C# windows form app?如何从 C# windows 窗体应用程序执行 .bat 文件?
【发布时间】:2012-03-10 00:55:32
【问题描述】:

我需要做的是让 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。我不知道如何做到这一点。我已经检查了这个site,它适用于 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();

【问题讨论】:

    标签: c#-2.0 external-process batch-file


    【解决方案1】:

    这是您要查找的内容:

    Service hangs up at WaitForExit after calling batch file

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

    【讨论】:

    • 好吧,这看起来更像。我会试试这个。侧边栏 - 曾经希望 MS 的编程语言有更长的名称吗?谷歌搜索“C#”“.bat”是徒劳的。
    【解决方案2】:

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

    如果目标是一个文件: 回声 f | [批处理文件路径]

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

    它基本上只是将“echo”之后的字母通过管道传输到批处理文件的输入。

    【讨论】:

      猜你喜欢
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多