C#控制台程序的参数解析类库 CommandLine简单使用说明

前言

C#开发的控制台程序,默认接收string[] args参数。如果有多个参数需要输入时,可以按照顺序依次输入;但如果有些参数不是必选的,或者有些参数中间需要有空格比如时间“2016-05-18 24:35:00”,处理起来就比较麻烦了。一些常用的命令行工具都会提供指定参数的方式,比如:curl

C:\Users\Administrator>curl --help
Usage: curl [options...] <url>
Options: (H) means HTTP/HTTPS only, (F) means FTP only
--anyauth Pick "any" authentication method (H)
-a/--append Append to target file when uploading (F)
--basic Use HTTP Basic Authentication (H)
--cacert <file> CA certificate to verify peer against (SSL)
--capath <directory> CA directory to verify peer against (SSL)
-E/--cert <cert[:passwd]> Client certificate file and password (SSL)

这里要介绍的 CommandLine就是帮助我们轻易完成参数接收和帮助输出的开源类库,同时它可以把接收到的参数转换成对象,方便程序的处理。

教程

  1. 新建控制台项目,安装CommandLine。

    可以下载、编译、引用CommandLine.dll,也可以使用nuget安装 Install-Package CommandLineParser

  2. 新建参数说明类 Options 

首先,添加命名空间  

using CommandLine;
using CommandLine.Text;

然后,定义Options 类

 1   class Options
 2     {
 3         [Option(‘r‘, "read", MetaValue = "FILE", Required = true, HelpText = "输入数据文件")]
 4         public string InputFile { get; set; }
 5
 6         [Option(‘w‘, "write", MetaValue = "FILE", Required = false, HelpText = "输出数据文件")]
 7         public string OutputFile { get; set; }
 8
 9
10         [Option(‘s‘, "start-time", MetaValue = "STARTTIME", Required = true, HelpText = "开始时间")]
11         public DateTime StartTime { get; set; }
12
13         [Option(‘e‘, "end-time", MetaValue = "ENDTIME", Required = true, HelpText = "结束时间")]
14         public DateTime EndTime { get; set; }
15
16
17         [HelpOption]
18         public string GetUsage()
19         {
20             return HelpText.AutoBuild(this, current => HelpText.DefaultParsingErrorsHandler(this, current));
21         }
22
23     }

  3. 修改控制台主程序 Program的Main函数  

 1   //输出信息时的头信息
 2         private static readonly HeadingInfo HeadingInfo = new HeadingInfo("演示程序", "V1.8");
 3
 4         static void Main(string[] args)
 5         {
 6             //这种输出会在前面添加"演示程序"几个字
 7             HeadingInfo.WriteError("包含头信息的错误数据");
 8             HeadingInfo.WriteMessage("包含头信息的消息数据");
 9
10             Console.WriteLine("不包含头信息的错误数据");
11             Console.WriteLine("不包含头信息的消息数据");
12
13             var options = new Options();
14             if (CommandLine.Parser.Default.ParseArguments(args, options))
15             {
16                 Console.WriteLine("Input File:" + options.InputFile);
17                 Console.WriteLine("Output File:" + options.OutputFile);
18
19                 Console.WriteLine("开始时间:" + options.StartTime.ToString("yyyy年MM月dd日 HH点mm分"));
20                 Console.WriteLine("结束时间:" + options.EndTime.ToString("yyyy年MM月dd日 HH点mm分"));
21                 Console.Read();
22             }
23             //else
24             //{
25             //    Console.WriteLine(options.GetUsage());
26             //    Console.Read();
27             //}
28
29             Console.Read();
30         }

3. 测试控制台程序

不输入任何参数,输出了参数的说明信息,如下图:

输入参数,如下图:

时间和字符串类型的字段都获取到了值。 

时间: 2024-10-07 17:50:17

C#控制台程序的参数解析类库 CommandLine简单使用说明的相关文章

Visual 中控制台程序如何使用MFC类库

unresolved external symbol __beginthreadex错误的解决Win32 Consle Application使用MFC的一些类如CString时编译时相信会很经常遇到一些连接错误:1. unresolved external symbol __beginthreadex2. unresolved external symbol __endthreadex但是不用MFC类又让人不甘心,放着好好的类库不用实在太可惜了.其实是可以用的,只是我们的设置有问题.下面我将具

程序开发常用第三方类库一览表(VendorLib)

以下是自己开发过程中用到的第三方类库,记录下来方便查阅 ---------------------------------------------------------------------------------------------------///////////////////////////////////////////////////JAVA第三方类库///////////////////////////////////////////////----------------

C#命令行参数解析类以及使用实例

http://blog.csdn.net/jackxinxu2100/article/details/6642694 编写命令行程序时如何进行命令行参数解析至关重要,下面将引用codeproject里面的一个命令行参数解析类并阐述如何使用来说明C#命令行参数解析的过程. 先看参数解析类,分为CommandLine类以及CommandArgs类,前者负责解析,后者负责结果封装,解析的结果分为三类:即 a=b 对应的key/value类型,-a b 对应的option与option value(可省

重定向子进程控制台程序的输入输出

重定向子进程控制台程序的输入输出 重定向所做的工作都在父进程,但需要子进程遵守下面的规则: 子进程程序在输出代码后,等待输入之前需要调用fflush(stdout)函数,这样把输出的内容放入缓冲区,父进程才能及时的读到输出数据. 不遵守以上规则就没办法实现有效的交互了,cmd.exe是遵守这个规则的典范,大部分控制台程序都不遵守这个规则.今天我试图给Google的V8 Javascript 的Shell搞一个GUI,方便我输入Javascript程序,就遇到了v8_shell不遵守这个的问题.好

C、C++控制台程序、Windows API程序、MFC程序理解与比较

在编程语言中,函数是一个很重要的概念,其身影无处不在.在面向过程的编程方式中,函数更是程序的基本构建模块,在面向对象的编程方式中,函数演变为类或对象的成员(当然也可以使用与类无关的函数).函数由函数头和函数体组成.函数头包括域属性(如external.static或类域).返回值类型.函数名.及参数.域属性包括其在多文件编程中的可见范围,是否是属于某一个类的成员?返回值类型是指函数返回的值的具体数据类型(可以理解为函数输出的一部分).函数名是函数保存在内存代码区的首地址,用于函数的调用及函数指针

给你的JAVA程序配置参数(Properties的使用)

我们在写JAVA程序时,很多时候运行程序的参数是需要动态改变的 测试时一系列参数,运行时一系列参数 又或者数据库地址也需要配一套参数,以方便今后的动态部署 这些变量的初始化,我们在写小DEMO时完全可以写死在JAVA文件中 但程序需要发布或者局部部署时,这些参数就需要脱离程序代码了 我们有多种存放参数的方式,比如数据库.XML文件又或者直接是txt文件 现在介绍一种使用JAVA,简单方便的参数读取方式 .properties文件,我们并不陌生,很多优秀的框架中就能看到它的存在,比如Hiberna

第5章4节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 命令行参数解析(原创)

天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文"寻求合作伙伴编写<深入理解 MonkeyRunner>书籍".但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在所难免.有需要的就参考下吧,转发的话还请保留每篇文章结尾的出处等信息. 设置好Monkey的CLASSPATH环境变量以指定"/system/framework /framework/monkey.jar"后,/system/bin/monkey这个shell脚本就会通

四.jQuery源码解析之jQuery.fn.init()的参数解析

从return new jQuery.fn.init( selector, context, rootjQuery )中可以看出 参数selector和context是来自我们在调用jQuery方法时传过来的.那么selector和context都有哪些可能. 对于表格中的4~9行中的可能做具体分析. 如果selector是字符串,则首先检测是html代码还是#id. 126行的if语句:以"<"开头,以">"结尾,且长度>=3.则假设额这个是HT

PHP 命令行参数解析工具类

<?php /** * 命令行参数解析工具类 * @author guolinchao */ class CommandLine { // 临时记录短选项的选项值 private static $shortOptVal = null; // options value private static $optsArr = array(); // command args private static $argsArr = array(); // 是否已解析过命令行参数 private static