




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第C#命令行参数解析库System.CommandLine使用平常在日常的开发过程中,会经常用到命令行工具。如cmd下的各种命令。
以下为sc命令执行后的截图,可以看到,由于没有输入任何附带参数,所以程序并未执行任何操作,只是输出了描述和用法。
系统在创建一个新进程时,会传一个命令行给它,也就是命令行字符串。
程序需要对命令行字符串进行解析,并执行相应操作。
如使用scquery可以查询当前系统的服务:
在C#中的控制台程序中,Main函数中传入的args字符串数组,就是系统传入进程的命令行参数。
在构建具有复杂命令行参数的控制台程序时,手动解析参数就变得非常麻烦。这里推荐一个开源的库,可以更加方便的解析命令行参数。
System.CommandLine介绍
System.CommandLine是一个基于.NetStandard2.0(支持.NetFrameWork+和.NetCore2.0+)的命令行参数解析库,项目地址/dotnet/command-line-api,目前,该项目还是属于beta状态,期待以后的正式版本。
由于不是正式版本,在Nuget中引用时,需要钩上Includeprerelease,才能找到这个包。
System.CommandLine的一些基本概念
Token(标记)
命令行的每个单词都是一个标记,如下面的"sc"、"query"和"eventlog"都是一个Token
Commands(命令)
Commands就是应用程序根据Token执行相应的操作(在System.CommandLine库中,对应Command类)
RootCommand(根命令)
根命令是代表可执行程序本身的Commands,如sc(在System.CommandLine库中,对应RootCommand类)
SubCommands(子命令)
一些命令行程序会有SubCommands,如上面的scquery中的query就是子命令(在System.CommandLine,对应Command类)
Options(可选项)
Options就是传递给Commands的命名参数,如app-myoption123中的-myoption123就是一个Options
Argument(参数)
参数就是传递给选项或命令的值。
说明:
常规的调用如下:
xx.exe[options]argument[command]
Delimiters(分隔符)
分隔符就是把Options的命令和值分开的符号
如下三种写法都是一样的,可以使用空格、=或:符号
app-myoption123
app-myoption=123
app-myoption:123
Aliases(别名)
可以为命令或选项设置较短的别名,如
-v,--verbose
--o,--option
System.CommandLine使用
在下面的示例中,我们会构建一个简单的控制台爬虫工具。
1、使用VisualStudio2025创建一个.NetCore控制台程序crawler-line
2、导入System.CommandLine包
3、创建一个RootCommand
varrootCommand=newRootCommand
newArgumentstring(
"url","websiteurl"),
newOptionbool(newstring[]{"--gethtml","-html"},"Gethtmlsource"),
newOptionbool(newstring[]{"--getimage","-image"},"Getimages"),
newOptionbool(newstring[]{"--regex-option","-regex"},"Useregex"),
newOptionbool(newstring[]{"--htmlagilitypack-option","-agpack"},"UseHtmlAgilityPack"),
newOptionbool(newstring[]{"--anglesharp-option","-agsharp"},"UseAngleSharp"),
newOptionstring(newstring[]{"--download-path","-path"},"Designatedownloadpath"),13};
说明:
可通过Option类的构造函数重载,为Option指定默认值。
publicOption(stringalias,FuncTgetDefaultValue,stringdescription=null);
如上面的-pathOption,指定默认值为D:\download,如下:
newOptionstring(newstring[]{"--download-path","-path"},getDefaultValue:()="D:\\download","Designatedownloadpath"),
也可以先实例化RootCommand对象,再通过Add的方式添加Argument和Option,如下:
varrootCommand=newRootCommand();
//添加Argument
rootCommand.AddArgument(newArgumentstring("url","websiteurl"));
//添加Option
rootCommand.AddOption(newOptionstring(newstring[]{"--download-path","-path"},"downloadpath"));
4、添加当前命令行程序的描述信息
rootCommand.Description=".NetCorecommand-linecrawler.";
5、解析Argument和Option
rootCommand.Handler=CommandHandler.Createstring,bool,bool,bool,bool,bool,string((stringurl,boolhtml,boolimage,boolregex,boolagpack,boolagsharp,stringpath)={
});
如果觉得参数太长,可以封装成类,再进行调用,如下:
publicclassCrawlerOption
publicstringUrl{get;set;}
publicboolGetHtml{get;set;}
publicboolGetImage{get;set;}
publicboolRe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全面备考2025年软考网络管理员试题及答案
- 2025年软考全面复习的试题及答案
- 法学与社会进步的结合试题及答案
- 法学概论应试技巧与试题及答案
- 经济转型中的金融体制改革研究试题及答案
- 2025年数字经济对公司战略的影响试题及答案
- 2025年软考软件设计师知识要点归纳试题及答案
- 法学概论中社区法治建设的探讨试题及答案
- 软件开发中的文档化要求试题及答案
- 2025届江苏省泰州市姜堰区数学七下期末学业质量监测试题含解析
- 砂石料供应、运输、售后服务方案-1
- 职业生涯规划与求职就业指导智慧树知到课后章节答案2023年下中南大学
- 办理用电户更名过户声明书范本
- 建设工程质量管理手册范本
- 中国文化遗产资料长城100字
- 高中生物选择性必修1基础背诵 课件
- 中医适宜技术操作规程及评分标准
- 2023-2024学年贵州省六盘水市小学语文六年级期末提升测试题详细参考答案解析
- 江苏南通轨道交通集团有限公司运营分公司社会招聘工作人员考试真题及答案2022
- 人工智能时代小学劳动教育的现实困境与突破路径 论文
- 野生动物管理学智慧树知到答案章节测试2023年东北林业大学
评论
0/150
提交评论