如何在C#中使用更多的DOS命令

6

我在DOS中有大约7个命令,我想在我的C#程序中运行它们。我可以这样做吗:

System.Diagnostics.Process.Start("cmd.exe", "my more commands here");

我是一个有用的助手,可以为您进行文本翻译。

编辑:

我正在制作一个运行g++的小应用程序。现在这样正确吗?

 System.Diagnostics.Process.Start("cmd.exe", "/k cd C:\\Alps\\compiler\\ /k g++ C:\\Alps\\" + project_name + "\\Debug\\Main.cpp");

编译命令:

g++ -c C:\Alps\here_is_projectname\Debug\Main.cpp -o main.o
4个回答

7

是的,您可以使用“/C”开关在命令行中传递:

System.Diagnostics.Process.Start("cmd.exe", "/C dir");

@chibacity:抱歉,我编辑了你的答案而不是我的。对不起。 - Brad Christie

7
cmd.exe /k <command>
cmd.exe /c <command>

这两个命令都是有效的。

  • /k 执行该命令并留下空提示符(如果您只想执行反馈,则可能不太理想)。
  • /c 执行该命令并在完成后关闭窗口。

如果您希望从特定目录执行命令,可以使用以下命令:

System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe");
p.StartInfo.Arguments = String.Format(@"/c g++ ""C:\Alps\{0}\Debug\Main.cpp""", project_name);
p.StartInfo.WorkingDirectory = @"C:\Alps\compiler";
p.StartInfo.CreateNoWindow = true;
p.StartInfo.ErrorDialog = false;
p.Start();

/k 对我来说更好。谢谢。还有一个小问题:在C#应用程序路径中启动cmd(在vs默认的mydocs.....\bin\debug中)吗?我需要更多的命令,所以/c对我来说不好。 - FrewCen
@FrewCen:说实话,我不记得了。但是,你可以修改 ProcessStartInfo.WorkingPath 以使其在任何你想要的地方运行。 - Brad Christie
@FrewCen:非常抱歉,我在StartInfo.Arguments的赋值中没有包含/c标志。 - Brad Christie
看一下,我有这段代码:System.Diagnostics.Process.Start("C:\\Alps\\compiler\\H-i586-cygwin32\\bin\\g++.exe", " -c Main.cpp -o Main.o"); 为什么它不起作用?你能看到任何错误吗? - FrewCen
@FrewCen:记得g++会在它自己的文件夹中查找“main.cpp”。确保在参数中引用完整路径。例如:Process.Start("C:\\alps\\compiler\\...\\g++.exe", "-c C:\\alps\\project_name\\...\\main.cpp -o ..."); - Brad Christie
显示剩余5条评论

3
您可以像以下这样做...
Process.Start(new ProcessStartInfo()
{
 Arguments = "args",
 WorkingDirectory = "C:\SomePath",
 UseShellExecute= true,
 FileName = ".exe"
});

如果需要,processstartinfo还有输入和输出重定向的选项。

例如...

Process.Start(new ProcessStartInfo()
{
 Arguments = "C:\\Alps\\" + project_name + "\\Debug\\Main.cpp",
 WorkingDirectory = "C:\\Apls\\",
 UseShellExecute= true,
 FileName = "g++.exe"
});

2
您可以启动cmd.exe,将stdin重定向并使用您的命令进行输出。
 process.Start(...);


                    process.StandardInput.WriteLine("Dir xxxxx");
                    process.StandardInput.WriteLine("Dir yyyyy");
                    process.StandardInput.WriteLine("Dir zzzzzz");
                    process.StandardInput.WriteLine("other command(s)");

当然,你应该记得设置进程启动信息,以表明你希望重定向输入:
 ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe);
        processStartInfo.CreateNoWindow = true;

        processStartInfo.ErrorDialog = false;

        processStartInfo.RedirectStandardInput = true;

@FrewCen 在我的例子中,process 是一个进程实例,而不是类。 - Felice Pollano

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