Запустить командные окна и запустить команды внутри

Мне нужно запустить командное окно с некоторыми аргументами и запустить больше команд внутри.

Например, запустите test.cmd и запустите mkdir.

Я могу запустить test.cmd с processstartinfo, но я не уверен, как запускать дальнейшие команды. Могу ли я передать дополнительные аргументы в процесс test.cmd?

Как мне это сделать?

Невозможно добавить комментарии к ответу... SO здесь.

Андреа, Это то, что я искал. Однако приведенный выше код не работает для меня.

Я запускаю 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"); 

Ответ 1

Вы можете отправить дополнительные команды в 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 не завершится правильно...

Ответ 2

Параметр /c на cmd.

ProcessStartInfo start = new ProcessStartInfo("cmd.exe", "/c pause");
Process.Start(start);

(pause - просто пример того, что вы можете запустить)

Но для создания каталога вы можете сделать это и большинство других файловых операций из С# напрямую

System.IO.Directory.CreateDirectory(@"c:\foo\bar");

Начать cmd из С# полезно, только если у вас есть большой bat файл, который вы не хотите реплицировать в С#.

Ответ 3

Может быть этот комментарий полезен. Это то, что вы имеете в виду?

Ответ 4

Чего вы пытаетесь достичь? Вам действительно нужно открыть командное окно, или вам нужно просто создать каталог, например?

mkdir - это исполняемый файл Windows - вы можете запустить эту программу так же, как вы запускаете cmd - нет необходимости сначала запускать процесс командного окна.

Вы также можете создать пакетный файл, содержащий все команды, которые вы хотите запустить, а затем просто запустить его с помощью уже используемых классов Process и ProcessStartInfo.