Запустите командные окна и выполните команды внутри - PullRequest
11 голосов
/ 01 сентября 2010

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

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

Я могу запустить test.cmd с processstartinfo, но я не уверен, как запускать дальнейшие команды. Могу ли я передать дополнительные аргументы процессу 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"); 

Ответы [ 4 ]

13 голосов
/ 01 сентября 2010

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

1 голос
/ 01 сентября 2010

Параметр /c для cmd.

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

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

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

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

Запуск cmd из c # полезен, только если у вас есть большой bat-файл, который вы не хотите копировать в c #.

1 голос
/ 01 сентября 2010

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

0 голосов
/ 01 сентября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...