Как избежать пути, содержащего пробелы - PullRequest
10 голосов
/ 17 сентября 2010

Чтобы передать путь с пробелами в консольное приложение .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 там, где путь отбрасывает свое побег.

Как обойти его с помощью общего решения?(без поиска значения каждого параметра, требующего экранирования и цитирования его вручную)

Ответы [ 2 ]

5 голосов
/ 17 сентября 2010

Я не думаю, что это возможно, поскольку пробел является разделителем для аргументов CLI, поэтому их необходимо экранировать.

Вы можете довольно просто извлечь это в метод расширения, чтобы вы могли просто запустить1003 * в вашем коде выше.

public static string[] Escape(this string[] args)
{
    return args.Select(s => s.Contains(" ") ? string.Format("\"{0}\"", s) : s).ToArray();
}
4 голосов
/ 17 сентября 2010

Просто укажите каждый параметр.Эта ...

myapp.exe "--path" "C:\Program Files\MyApp" "--flag"

... является совершенно корректной командной строкой и делает именно то, что вы хотите.

...