如何写一个"*.bat"文件?

has*_*e_0 2 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();         
    }
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 5

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

另一个问题(您刚刚在编辑中添加)是您设置UseShellExecutefalse.这要求您传递的文件是可执行文件.你的档案不是.您需要UseShellExecute成为true让Shell工作如何处理您的.bat文件.

另一个可能的问题是当前目录可能不是您认为的那样.

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

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

  • 设置UseShellExecutefalse.
  • 传递cmd.exe为可执行文件.
  • 将要执行的命令作为命令行传递.

但是,使用C#直接执行此操作会更容易,因此避免必须启动外部进程.