在C#中创建批处理文件然后执行它

时间:2012-11-06 14:04:19

标签: c# command-line batch-file

我是一个业余爱好的C#程序员,我正在为一个名为setMACE的CLI工具创建一个界面。这是我正在使用的代码片段:

if (!File.Exists(batpath))
{
    using (FileStream fs = File.Create(batpath))
    {
        fs.Close();
    }

    using (StreamWriter sw = new StreamWriter(batpath))
    {
        int outfile = r.Next(5);
        sw.WriteLine("cd " + Application.StartupPath);
        sw.WriteLine(exe + " " + "\"" + ofd.FileName + "\"" + " -d " + " >>logfile.txt");
    }
    Process proc = Process.Start(batpath);

这将产生以下结果.BAT:

cd C:\Users\Steve Jobs\Pictures\SetMACE_v1006
setMACE_x64.exe "C:\Users\Steve Jobs\Documents\avast.cap" -d  >>logfile.txt

当我在CMD中执行.BAT但当我让应用程序运行它时,它会生成一个带有该程序的新窗口并忽略>output.txt

如果这很简单,我很抱歉,但我在网上找不到任何内容。

2 个答案:

答案 0 :(得分:0)

您似乎正在通过启动生成cmd的第二个实例,该实例可能不会在您正在播放的同一目录中启动

为什么批处理文件有“start cmd”,为什么不直接运行setMACE_x64.exe?

即。您的批处理文件将是:

cd C:\Users\Steve Jobs\Pictures\SetMACE_v1006
setMACE_x64.exe "C:\Users\Steve Jobs\Documents\avast.cap" -d  >>logfile.txt

答案 1 :(得分:0)

试试这个:

string str = @"/c cd C:\Users\Steve Jobs\Pictures\SetMACE_v1006";
String str2 = @"setMACE_x64.exe ""C:\Users\Steve Jobs\Documents\avast.cap"" -d  >>logfile.txt"
Process.Start("cmd.exe", str);
Process.Start("cmd.exe", str2);

我希望这会有所帮助