.NET命令行解析器示例程序(命令行选项功能)

  示例需求

  拷贝文件,如:CopyFiles -s "E:\Framework\Tenoner - 副本 (2)" -p "*.csproj" -t "E:\Framework\Tenoner - 副本 (2)\Bak",可以支持:深度拷贝、拷贝符合指定模式的文件、是否覆盖等选项。

  使用 CommandLineParser

  CommandLineParser 是一个轻量级的工具,使用非常简答,官方也有教程。

  选项类

  

复制代码 代码如下:

  using System;

  using System.Collections.Generic;

  using System.Linq;

  using System.Text;

  using System.Threading.Tasks;

  using CommandLine;

  using CommandLine.Text;

  namespace CopyFiles

  {

  class Options

  {

  [Option(

  's', "source", Required = true,

  HelpText = "源目录。")]

  public string SourcePath { get; set; }

  [Option(

  'p', "pattern", Required = true,

  HelpText = "文件模式。")]

  public string SearchPattern { get; set; }

  [Option(

  't', "target", Required = true,

  HelpText = "目标目录。")]

  public string TargetPath { get; set; }

  [Option('a', "all", DefaultValue = true,

  HelpText = "是否包含所有目录?")]

  public bool AllDirectories { get; set; }

  [Option('o', "overwrite", DefaultValue = true,

  HelpText = "是否覆盖所有文件?")]

  public bool Overwrite { get; set; }

  [Option('v', "verbose", DefaultValue = true,

  HelpText = "是否打印消息?")]

  public bool Verbose { get; set; }

  [HelpOption]

  public string GetUsage()

  {

  return HelpText.AutoBuild(this);

  }

  public void WriteLine(string format, params object[] args)

  {

  if (this.Verbose)

  {

  Console.WriteLine(string.Format(format, args));

  }

  }

  }

  }

  工具类

  

复制代码 代码如下:

  using System;

  using System.Collections.Generic;

  using System.Linq;

  using System.Text;

  using System.Threading.Tasks;

  using CommandLine;

  using Happy.Utils;

  namespace CopyFiles

  {

  class Program

  {

  static void Main(string[] args)

  {

  var options = new Options();

  if (Parser.Default.ParseArguments(args, options))

  {

  FileUtil.Copy(

  options.SourcePath,

  options.SearchPattern,

  options.TargetPath,

  (sourceFile, targetFile) =>

  {

  options.WriteLine("拷贝文件:{0} 到 {1}", sourceFile, targetFile);

  },

  (exceptionInfo) =>

  {

  options.WriteLine(exceptionInfo.Exception.Message);

  exceptionInfo.ExceptionHandled = true;

  },

  options.AllDirectories,

  options.Overwrite);

  }

  }

  }

  }

.NET命令行解析器示例程序(命令行选项功能)