using System.Collections.Generic;
using System.Threading.Tasks;
using System.ComponentModel;
public static void Main()
var CliInput=new ParsedOptions();
string[] args = "-d a b c -n Ethernet 20 1 -f terefere".Split();
var parser = new CommandLine.Parser(with=>
var result=parser.ParseArguments<Options>(args);
result.WithParsed(opts =>
Console.WriteLine(CliInput.ToString());
var helpText = HelpText.AutoBuild(result, h =>
Console.WriteLine($"Error: {e.Message}. \nType 'execName -h' for help.");
static void HandleErrors(IEnumerable<Error> errors) {
Console.WriteLine("Command line parsing error!");
foreach (var error in errors) {
switch((CommandLine.ErrorType)error.Tag) {
case CommandLine.ErrorType.UnknownOptionError: {
var err = (CommandLine.UnknownOptionError)error;
Console.WriteLine($"Error: Unknown option: '{err.Token}'");
case CommandLine.ErrorType.MissingValueOptionError: {
var err = (CommandLine.MissingValueOptionError)error;
Console.WriteLine($"Error: Missing value for '-{err.NameInfo.ShortName}'");
Console.WriteLine($"Error: {error.Tag}");
string execName="<tu wstawić nazwę execa>";
Console.WriteLine($"Type '{execName} -h' for help.");
[Option('d', Required = true, HelpText="Space separated IPv4 addresses")]
public IEnumerable<string> Data { get; set; }
[Option('n', HelpText = "Network Interface name")]
public IEnumerable<string> Nic { get; set; }
[Option('f', Required = true, HelpText = "Target firmware path")]
public IEnumerable<string> TargetFirmwarePath { get; set; }
public class ParsedOptions
public string NicName {get; set;}
public List<string> Devices {get; set;}
public string TargetFirmwarePath {get; set;}
this.Devices=new List<string>();
public void SetOpts(Options options) {
NicName=string.Join(" ",options.Nic);
foreach (string IpAddr in options.Data) {
if (options.TargetFirmwarePath.Count() == 1) {
TargetFirmwarePath=options.TargetFirmwarePath.FirstOrDefault();
throw new Exception("Invalid argument path!");
public override string ToString()
return string.Join(", ", new string[]{
string.Format("NicName= {0}", this.NicName),
string.Format("Devices= [{0}]", string.Join(", ", this.Devices)),
string.Format("TargetFirmwarePath= {0}", this.TargetFirmwarePath)