Как избежать пути, содержащего пробелы
Чтобы передать путь с пробелами в консольное приложение .NET, вы должны избежать этого. Вероятно, не убежать, а окружить двойными кавычками:
myapp.exe --path C:\Program Files\MyApp`
становится
new string[] { "--path", "C:\Program", "Files\MyApp" }
но
myapp.exe --path "C:\Program Files\MyApp"
становится
new string[] { "--path", "C:\Program Files\MyApp" }
и он отлично работает, и вы можете легко разбираться.
Я хочу расширить набор параметров, заданных с добавлением, и запустить новый процесс с результирующим набором параметров:
new ProcessStartInfo(
Assembly.GetEntryAssembly().Location,
String.Join(" ", Enumerable.Concat(args, new[] { "--flag" })))
Это становится myapp.exe --path C:\Program Files\MyApp --flag
, где путь отключается.
Как обходиться с общим решением? (без поиска каждого значения параметра, требующего экранирования и цитирования его вручную)
Ответы
Ответ 1
Я не думаю, что это возможно, поскольку пространство является разделителем для аргументов CLI, поэтому им нужно будет экранировать.
Вы можете извлечь это в метод расширения довольно хорошо, чтобы вы могли просто запустить args.Escape()
в своем коде выше.
public static string[] Escape(this string[] args)
{
return args.Select(s => s.Contains(" ") ? string.Format("\"{0}\"", s) : s).ToArray();
}
Ответ 2
Просто укажите каждый параметр. Это...
myapp.exe "--path" "C:\Program Files\MyApp" "--flag"
... является вполне корректной командной строкой и делает именно то, что вы хотите.