Использование CommandLineParser для указания нескольких входов одного типа - PullRequest
0 голосов
/ 10 марта 2020

Я хочу использовать пакет CommandLineParser для создания утилиты, которая может указывать произвольное количество путей к файлам в командной строке. Исходя из моего текущего понимания этого пакета, канонический способ сделать это:

/// <summary>
/// Enumerable list of files
/// </summary>
[Option('i', "input", HelpText = "Input file(s) to process", Separator =',')]
public IEnumerable<string>Input { get; set; }
...
// Process the input file paths
foreach(var path in Input)
{
    ...
}

, для которого требуется командная строка, которая выглядит следующим образом:

MyProgram -i c:\path\to\first\file1.txt,c:\path\to\second\file2.txt,c:\path\to\third\file3.txt

Но то, что я действительно хочу, это командная строка, которая выглядит следующим образом:

MyProgram -i c:\path\to\first\file1.txt ^
          -i c:\path\to\second\file2.txt ^
          -i c:\path\to\third\file3.txt

(обратите внимание, что символ ^ является windows символом продолжения командной строки)

Хотя я был бы счастлив:

MyProgram -i c:\path\to\first\file1.txt ^
             c:\path\to\second\file2.txt ^
             c:\path\to\third\file3.txt

Есть ли сейчас какой-либо способ достичь того, чего я хочу, с пакетом CommandLineParser? Я не очень разбираюсь в пакетах, поэтому я мог что-то упустить из виду.

1 Ответ

0 голосов
/ 18 марта 2020

В своем незнании я не осознавал, что разделитель по умолчанию для перечисляемых опций на самом деле является пробелом. Так что, если бы я оставил определение как:

/// <summary>
/// Enumerable list of files
/// </summary>
[Option('i', "input", HelpText = "Input file(s) to process")]
public IEnumerable<string>Input { get; set; }

Тогда CommandLineParser из коробки будет поддерживать:

MyProgram -i c:\path\to\first\file1.txt ^
             c:\path\to\second\file2.txt ^
             c:\path\to\third\file3.txt

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

MyProgram -i c:\path\to\first\file1.txt ^
          -i c:\path\to\second\file2.txt ^
          -i c:\path\to\third\file3.txt

в

MyProgram -i c:\path\to\first\file1.txt ^
             c:\path\to\second\file2.txt ^
             c:\path\to\third\file3.txt

Перед передачей его самому CommandLineParser.

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