C# 启动命令窗口并在其中运行命令

C# 启动命令窗口并在其中运行命令,c#,command-line,C#,Command Line,我需要用一些参数启动命令窗口,并在其中运行更多命令 例如,启动test.cmd并运行mkdir 我可以使用processstartinfo启动test.cmd,但我不确定如何运行进一步的命令。我可以向test.cmd进程传递更多参数吗 我该怎么办 无法添加评论以回答。。。所以在这里写作 安德里亚,这就是我要找的。但是,上面的代码对我不起作用 我正在启动一个test.cmd,它是一个新的命令环境(比如razzle构建环境),我需要运行更多的命令 psi.FileName = @"c:\test.c

我需要用一些参数启动命令窗口,并在其中运行更多命令

例如,启动test.cmd并运行mkdir

我可以使用processstartinfo启动test.cmd,但我不确定如何运行进一步的命令。我可以向test.cmd进程传递更多参数吗

我该怎么办

无法添加评论以回答。。。所以在这里写作

安德里亚,这就是我要找的。但是,上面的代码对我不起作用

我正在启动一个test.cmd,它是一个新的命令环境(比如razzle构建环境),我需要运行更多的命令

psi.FileName = @"c:\test.cmd";
psi.Arguments = @"arg0 arg1 arg2";

psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;
psi.CreateNoWindow = true;
psi.UseShellExecute = false;

Process p = new Process();
p.StartInfo = psi;
p.Start();
p.StandardInput.WriteLine(@"dir>c:\results.txt");
p.StandardInput.WriteLine(@"dir>c:\results2.txt"); 

你想达到什么目标?例如,您真的需要打开一个命令窗口,还是只需要创建一个目录

mkdir
是windows可执行文件-您可以用启动
cmd
的相同方式启动此程序-无需先启动命令窗口进程


您还可以创建一个包含所有要运行的命令的批处理文件,然后使用您已经使用的Process和ProcessStartInfo类启动它。

/c
参数设置为
cmd

ProcessStartInfo start = new ProcessStartInfo("cmd.exe", "/c pause");
Process.Start(start);
pause
只是您可以运行的示例)

但对于创建目录,您可以直接从c#执行该操作和大多数其他文件操作


从c#启动cmd仅在您不想在c#中复制某些大的bat文件时才有用。

您可以使用该过程向cmd.exe发送更多命令 标准输入。您必须以这种方式重定向它:

var startInfo = new ProcessStartInfo
                    {
                        FileName = "cmd.exe",
                        RedirectStandardInput = true,
                        RedirectStandardOutput = true,
                        UseShellExecute = false,
                        CreateNoWindow = true
                    };

var process = new Process {StartInfo = startInfo};

process.Start();
process.StandardInput.WriteLine(@"dir>c:\results.txt");
process.StandardInput.WriteLine(@"dir>c:\results2.txt");
process.StandardInput.WriteLine("exit");

process.WaitForExit();

记住写“exit”作为最后一个命令,否则cmd进程不会正确终止…

这怎么会不起作用

    var startInfo = new ProcessStartInfo
    {
        FileName = "cmd.exe",
        RedirectStandardInput = true,
        RedirectStandardOutput = true,
        UseShellExecute = false,
        CreateNoWindow = false
    };

    var process = new Process { StartInfo = startInfo };

    process.Start();
    process.StandardInput.WriteLine(@" dir");
    process.WaitForExit();

温斯顿,mkdir只是一个例子。我正在启动一个新的cmd环境(基本上是存储一个预设的env变量),我想运行更多的命令。安德里亚的回答应该能解决我的问题。但似乎对我不起作用。我认为您必须在我的代码中保留psi.FileName和psi.Arguments,只需执行p.StandardInput.WriteLine(@“c:\test.cmd arg0 arg1 arg2”);谢谢,我试过了,成功了。但是,我试图读取控制台日志,它不会返回我需要的输出。以下是我的完整代码,以供澄清。我期望的是command123.processp=newprocess()的输出;p、 StartInfo=psi;p、 Start();p、 StandardInput.WriteLine(@“c:\test.cmd arg1 arg2&&cd/d c:\testdir\sample&&command123/c”);p、 StandardInput.WriteLine(@“退出”);字符串输出=p.StandardOutput.ReadToEnd();p、 WaitForExit();我得到的输出是在控制台中运行的上述命令。如何获得command123的输出?
    var startInfo = new ProcessStartInfo
    {
        FileName = "cmd.exe",
        RedirectStandardInput = true,
        RedirectStandardOutput = true,
        UseShellExecute = false,
        CreateNoWindow = false
    };

    var process = new Process { StartInfo = startInfo };

    process.Start();
    process.StandardInput.WriteLine(@" dir");
    process.WaitForExit();