Запустить командную строку из c # с параметрами? - PullRequest
8 голосов
/ 11 мая 2011

Можно запустить командную строку в c #, используя что-то вроде этого:

process = new Process();
process.StartInfo.FileName = command;
process.Start();

Проблема в том, что в командной строке содержатся параметры, например:

C:\My Dir\MyFile.exe MyParam1 MyParam2

Это не будетработать, и я не вижу, как извлечь параметры из этой строки и установить его в свойстве process.Arguments?Путь и имя файла могут быть другими, файл не должен заканчиваться на exe.

Как я могу решить эту проблему?

Ответы [ 3 ]

7 голосов
/ 11 мая 2011

Если я правильно понимаю, я бы использовал:

string command = @"C:\My Dir\MyFile.exe";
string args = "MyParam1 MyParam2";

Process process = new Process(); 
process.StartInfo.FileName = command; 
process.StartInfo.Arguments = args;
process.Start(); 

Если у вас есть полная строка, которую вам нужно проанализировать, я бы использовал другие методы, предложенные другими здесь.Если вы хотите добавить параметры в процесс, используйте выше.

4 голосов
/ 11 мая 2011

Это может быть худшее решение, но может быть и безопаснее:

string cmd = "C:\\My Dir\\MyFile.exe MyParam1 MyParam2";
System.IO.FileInfo fi = null;
StringBuilder file = new StringBuilder();
// look up until you find an existing file
foreach ( char c in cmd )
{
    file.Append( c );
    fi = new System.IO.FileInfo( file.ToString() );
    if ( fi.Exists ) break;
}

cmd = cmd.Remove( 0, file.Length );
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo( fi.Name, cmd );
System.Diagnostics.Process.Start( psi );
3 голосов
/ 11 мая 2011

Утверждение: если имя файла содержит пробел, оно должно быть заключено в двойные кавычки.

Это, безусловно, имеет место в Windows.В противном случае правила становятся намного более контекстными.

Посмотрите на регулярные выражения-пробелы-но-не-в-строках , я подозреваю, что вы можете использовать регулярное выражение,

" +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"

, используя Regex.Split() для преобразования вашей командной строки в массив.Первая часть должна быть вашим именем файла.

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