如何写一个“* .bat”文件?

时间:2014-12-06 15:16:23

标签: c# batch-file

为什么“1.bat”无法成功运行?任何帮助将不胜感激。 “1.bat”已成功创建。它可以无错误地运行,但无法重命名文件。

    private void button1_Click(object sender, EventArgs e)
    {

        string str = System.Environment.CurrentDirectory; 
        str += "\\1.bat";
        string txt = "";
        txt = "ren *.mp3 *.wav";  

        StreamWriter sw = new StreamWriter(str,false, Encoding.UTF8);
        sw.Write(txt);
        sw.Close();

       Process p = new Process();
        p.StartInfo.FileName = str; 
        p.StartInfo.Arguments = "";
        p.StartInfo.UseShellExecute = false; 
        p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        p.Start();         
    }

1 个答案:

答案 0 :(得分:5)

一个问题是您的文件是使用UTF-8 BOM编写的。尝试通过Encoding.Default来测试一下。或者通过new UTF8Encoding(false)作为编码来传递省略BOM的UTF-8编码。

另一个问题(您刚刚在编辑中添加)是您将UseShellExecute设置为false。这要求您传递的文件是可执行文件。你的档案不是。您需要UseShellExecutetrue才能让shell了解如何处理您的.bat文件。

另一个可能的问题是当前目录可能不是你想象的那样。

当面对这样的问题时,根本不需要无助。做一些调试。在批处理文件的末尾添加pause,并确保可以看到控制台。您将立即发现问题所在。学习如何调试与学习如何编程一样重要。在你能做到前者之前,你不可能做到后者。

如果我不得不这样做,通过外部流程,我会:

  • UseShellExecute设为false
  • cmd.exe作为可执行文件传递。
  • 将要执行的命令作为命令行传递。

但是,使用C#直接执行此操作要容易得多,因此避免必须启动外部进程。