背景

经常需要开发一下小工具,之前都是自己解析命令行参数,接触过动态语言社区以后,发现命令行解析有特定的模式和框架可以利用,本文介绍一个 .NET 平台的类库。

示例

需求

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

使用 CommandLineParser

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

选项类

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 using CommandLine;
 8 using CommandLine.Text;
 9
10 namespace CopyFiles
11 {
12     class Options
13     {
14         [Option(
15             's', "source", Required = true,
16             HelpText = "源目录。")]
17         public string SourcePath { get; set; }
18
19         [Option(
20             'p', "pattern", Required = true,
21             HelpText = "文件模式。")]
22         public string SearchPattern { get; set; }
23
24         [Option(
25             't', "target", Required = true,
26             HelpText = "目标目录。")]
27         public string TargetPath { get; set; }
28
29         [Option('a', "all", DefaultValue = true,
30             HelpText = "是否包含所有目录?")]
31         public bool AllDirectories { get; set; }
32
33         [Option('o', "overwrite", DefaultValue = true,
34             HelpText = "是否覆盖所有文件?")]
35         public bool Overwrite { get; set; }
36
37         [Option('v', "verbose", DefaultValue = true,
38             HelpText = "是否打印消息?")]
39         public bool Verbose { get; set; }
40
41         [HelpOption]
42         public string GetUsage()
43         {
44             return HelpText.AutoBuild(this);
45         }
46
47         public void WriteLine(string format, params object[] args)
48         {
49             if (this.Verbose)
50             {
51                 Console.WriteLine(string.Format(format, args));
52             }
53         }
54     }
55 }

工具类

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 using CommandLine;
 8 using Happy.Utils;
 9
10 namespace CopyFiles
11 {
12     class Program
13     {
14         static void Main(string[] args)
15         {
16             var options = new Options();
17             if (Parser.Default.ParseArguments(args, options))
18             {
19                 FileUtil.Copy(
20                     options.SourcePath,
21                     options.SearchPattern,
22                     options.TargetPath,
23                     (sourceFile, targetFile) =>
24                     {
25                         options.WriteLine("拷贝文件:{0} 到 {1}", sourceFile, targetFile);
26                     },
27                     (exceptionInfo) =>
28                     {
29                         options.WriteLine(exceptionInfo.Exception.Message);
30
31                         exceptionInfo.ExceptionHandled = true;
32                     },
33                     options.AllDirectories,
34                     options.Overwrite);
35             }
36         }
37     }
38 }

运行效果

备注

用动态语言写过几个简单的工具,没有坚持下来,主要原因是对 API 的不熟悉,加上目前晚上要学习 Java,没法同时在三种语言中快速的切换。

.NET:命令行解析器介绍相关推荐

  1. [Python] argparse命令行解析器的使用

    参考了python文档argparse- 用于命令行选项,参数和子命令的解析器和一篇非常非常优秀的博客python命令行解析模块argpars. 该argparse模块可以轻松编写用户友好的命令行界面 ...

  2. 基于cobra的go语言命令行解析器

    ubuntu安装cobra $ sudo apt install cobra Reading package lists... Done Building dependency tree Readin ...

  3. Python 命令行解析器argparse及传参数详解

    源码实例一 from argparse import ArgumentParserparser = ArgumentParser(description='Beeswarm')group = pars ...

  4. IConfiguration的命令行解析

    目录 介绍 背景 使用代码 支持哪些操作系统? 您可以绑定哪些类型的属性? 绑定到集合 嵌套属性和公共无参数构造函数 提供帮助 日志记录 兴趣点 介绍 有许多可用于.NET的命令行解析器,其中一些可与 ...

  5. python 命令行解析函数_python命令行解析之parse_known_args()函数和parse_args()使用区别介绍...

    在python中,命令行解析的很好用, 首先导入命令行解析模块 import argparse import sys 然后创建对象 parse=argparse.ArgumentParser() 然后 ...

  6. python getopt argparse_python OptParse模块和argparse命令行解析的用法详解

    https://www.cnblogs.com/wj-1314/p/8974021.html OptParse模块的简单介绍 Python 有两个内建的模块用于处理命令行参数: 一个是 getopt只 ...

  7. 常用的python命令行解析库

    常用的python命令行解析库,这儿介绍3种: 1.argparse 2.click 3.fire argparse是python自带的模块,要经历解析器初始化.参数定义.解析一套流程,使用起来有些繁 ...

  8. python 命令行 解析模块 optparse、argparse

    optparse:https://docs.python.org/zh-cn/3/library/optparse.html argparse :https://docs.python.org/zh- ...

  9. fzf命令行使用_为什么要使用命令行模糊查找器fzf

    fzf命令行使用 by Alexey Samoshkin 通过阿列克谢·萨莫什金(Alexey Samoshkin) 为什么要使用命令行模糊查找器fzf (Why you should be usin ...

最新文章

  1. git 覆盖本地修改_Git拉力–如何使用Git覆盖本地更改
  2. C++五子棋(七)——main函数以及项目总结
  3. 2020阿里面试题整理(含答案)
  4. Elasticsearch 实现自定义排序插件
  5. SAP CRM Fiori应用Simulation pipeline里dualSlider的实现
  6. 粥做得好不好,全凭一个良心!
  7. vmware虚机无法重启关机的强制处理办法
  8. retinanet 部署_目标检测RetinaNet_飞桨-源于产业实践的开源深度学习平台
  9. 如何提高go代码覆盖率_如何提高代码质量?
  10. 你竟然是这么神奇的 CSS
  11. 现代大学英语精读第二版(第四册)学习笔记(原文及全文翻译)——5B - Could You Live with Less(你可以简朴地生活吗)
  12. Arcgis10.8中将三维的高程点转换为二维的高程点
  13. 系统上电后 bootloader的执行流程
  14. Minecraft 1.12.2模组开发(十九) 自定义3D物品模型
  15. 关于分钻石的数学题有五个海盗得到了一百颗的钻石
  16. Leetcode典型题解答和分析、归纳和汇总——T101(对称二叉树)
  17. 解决下载github-production-release-asset-2e65be.s3.amazonaws.com上release文件慢的问题
  18. MySQL表字段不能用describe
  19. 在WPSOFFICE表格中插入表单域(转)
  20. 基于信通院 Serverless 工具链模型的实践:Serverless Devs

热门文章

  1. 《Adobe Illustrator CS6中文版经典教程(彩色版)》—第1课1.8节使用面板菜单
  2. Apache上部署Django
  3. Exchange日常管理之二十一:管理邮件归档
  4. linux的特殊权限SUID、SGID和SBIT
  5. lopa分析_HAZOP : 保护层分析之失效使能分析导则
  6. 内核初始化kernel.asm
  7. Android客户端和服务端如何使用Token和Session
  8. HTML的dl、dt、dd标记制作表格对决Table制作表
  9. Js作用域链及变量作用域
  10. python的函数式编程玩法+年末小感