国内高清视频素材网站,wordpress 快速回复,网站备案网站建设方案书,做婚纱网站的步骤命令行参数 
平常在日常的开发过程中#xff0c;会经常用到命令行工具。如cmd下的各种命令。 
以下为sc命令执行后的截图#xff0c;可以看到#xff0c;由于没有输入任何附带参数#xff0c;所以程序并未执行任何操作#xff0c;只是输出了描述和用法。 系统在创建一个新…命令行参数 
平常在日常的开发过程中会经常用到命令行工具。如cmd下的各种命令。 
以下为sc命令执行后的截图可以看到由于没有输入任何附带参数所以程序并未执行任何操作只是输出了描述和用法。 系统在创建一个新进程时会传一个命令行给它也就是命令行字符串。 
程序需要对命令行字符串进行解析并执行相应操作。 
如使用sc query可以查询当前系统的服务 在C#中的控制台程序中Main函数中传入的args字符串数组就是系统传入进程的命令行参数。 在构建具有复杂命令行参数的控制台程序时 手动解析参数就变得非常麻烦。这里推荐一个开源的库可以更加方便的解析命令行参数。 System.CommandLine介绍 
System.CommandLine是一个基于.Net Standard 2.0支持.Net FrameWork 4.6.1.2和.Net Core 2.0的命令行参数解析库项目地址 https://github.com/dotnet/command-line-api目前该项目还是属于beta状态期待以后的正式版本。 
由于不是正式版本在Nuget中引用时需要钩上Include prerelease才能找到这个包。 System.CommandLine的一些基本概念 
Token(标记) 
命令行的每个单词都是一个标记如下面的sc、query和eventlog都是一个Token Commands(命令) 
Commands就是应用程序根据Token执行相应的操作(在System.CommandLine库中对应 Command类) Root Command(根命令) 
根命令是代表可执行程序本身的Commands如 sc(在System.CommandLine库中对应RootCommand类) SubCommands(子命令) 
一些命令行程序会有SubCommands如上面的sc query中的query就是子命令(在System.CommandLine对应Command类) Options(可选项) 
Options就是传递给Commands的命名参数如 app -myoption123中的 -myoption 123就是一个Options Argument(参数) 
参数就是传递给选项或命令的值。 说明 
常规的调用如下 
xx.exe   [options]   argument  [command] Delimiters分隔符 
分隔符就是把Options的命令和值分开的符号 
如下三种写法都是一样的可以使用空格、或 符号 
app -myoption 123 
app -myoption123 
app -myoption:123 Aliases(别名) 
可以为命令或选项设置较短的别名如 
-v, --verbose    
--o, --option  System.CommandLine使用 
在下面的示例中我们会构建一个简单的控制台爬虫工具。 
1、使用Visual Studio 2019创建一个.Net Core控制台程序crawler-line 2、导入System.CommandLine包 3、创建一个RootCommand 1 var rootCommand  new RootCommand2             {3                 new Argumentstring(4                     url,web site url),5                 new Optionbool(new string[]{ --gethtml ,-html},Get html source),6                 new Optionbool(new string[]{ --getimage ,-image},Get images),7                 new Optionbool(new string[]{ --regex-option ,-regex},Use regex),8                 new Optionbool(new string[]{ --htmlagilitypack-option, -agpack},Use HtmlAgilityPack),9                 new Optionbool(new string[]{ --anglesharp-option, -agsharp},Use AngleSharp),
10                 new Optionstring(new string[]{ --download-path ,-path},Designate download path),13             }; 说明 
可通过Option类的构造函数重载为Option指定默认值。 
1  public Option(string alias, FuncT getDefaultValue, string? description  null); 
如上面的-path Option指定默认值为D:\download如下 
1 new Optionstring(new string[]{ --download-path ,-path},getDefaultValue:()D:\\download,Designate download path), 也可以先实例化RootCommand对象再通过Add的方式添加Argument和Option如下 
1 var rootCommand  new RootCommand();
2 //添加 Argument
3 rootCommand.AddArgument(new Argumentstring(url,web site url));
4 //添加 Option
5 rootCommand.AddOption(new Optionstring(new string[] {--download-path,-path },download path)); 4、添加当前命令行程序的描述信息 1 rootCommand.Description  .Net Core command-line crawler.; 5、解析Argument和Option 
rootCommand.Handler  CommandHandler.Createstring, bool, bool, bool, bool, bool, string((string url, bool html, bool image, bool regex, bool agpack, bool agsharp, string path)  {}); 如果觉得参数太长可以封装成类再进行调用如下 1 public class CrawlerOption2     {3         public string Url { get; set; }4         public bool GetHtml { get; set; }5         public bool GetImage { get; set; }6         public bool RegexOption { get; set; }7         public bool HtmlagilitypackOption { get; set; }8         public bool AnglesharpOption { get; set; }9         public string DownloadPath { get; set; }
10     } 1 rootCommand.Handler  CommandHandler.CreateCrawlerOption((crawlerOption) 
2             {
3 
4             }) 6、添加Command并为Command添加处理函数 1             //添加 Command
2             var githubCommand  new Command(github, fork me on github);
3             //添加 Command的处理函数
4             githubCommand.Handler  CommandHandler.Create(()  { System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(cmd, $/c start https://github.com/zhaotianff/Crawler-Line)); });5             //将Command添加 到RootCommand
6             rootCommand.AddCommand(githubCommand); 说明 
1、RootCommand是顶级命令RootCommand可以添加CommandCommand又可以再添加SubCommand。如此可以无限循环没有限制 。但建议还是不要添加太多级的Command调用的时候会不太友好  
2、Command和RootCommand原理一样如果需要为Command添加Argument、Option和Command可以参照前面的示例 7、调用解析 
1 return rootCommand.InvokeAsync(args).Result; 8、调用示例 #执行github command
crawler-line.exe github
#执行github subcommand
crawler-line.exe github sub
#执行argument option
crawler-line.exe http://www.baidu.com -path D:\test 特别提示 
前面示例中都是为RootCommand添加的Argument和Option如果又指定 -path(Option)又执行githubCommand肯定会失败。因为github这个命令是RootCommand的子命令而-path选项是为RootCommand添加的 示例代码 
C#命令行参数解析库System.CommandLine介绍 文章转载自: http://www.morning.fwllb.cn.gov.cn.fwllb.cn http://www.morning.qxljc.cn.gov.cn.qxljc.cn http://www.morning.qrzwj.cn.gov.cn.qrzwj.cn http://www.morning.pccqr.cn.gov.cn.pccqr.cn http://www.morning.qpzjh.cn.gov.cn.qpzjh.cn http://www.morning.pccqr.cn.gov.cn.pccqr.cn http://www.morning.qdsmile.cn.gov.cn.qdsmile.cn http://www.morning.bbgr.cn.gov.cn.bbgr.cn http://www.morning.brrxz.cn.gov.cn.brrxz.cn http://www.morning.mnsts.cn.gov.cn.mnsts.cn http://www.morning.msgrq.cn.gov.cn.msgrq.cn http://www.morning.gfpyy.cn.gov.cn.gfpyy.cn http://www.morning.gbjxj.cn.gov.cn.gbjxj.cn http://www.morning.xlztn.cn.gov.cn.xlztn.cn http://www.morning.ypjjh.cn.gov.cn.ypjjh.cn http://www.morning.lgphx.cn.gov.cn.lgphx.cn http://www.morning.tqxtx.cn.gov.cn.tqxtx.cn http://www.morning.mnygn.cn.gov.cn.mnygn.cn http://www.morning.hkpyp.cn.gov.cn.hkpyp.cn http://www.morning.zzhqs.cn.gov.cn.zzhqs.cn http://www.morning.ktrh.cn.gov.cn.ktrh.cn http://www.morning.pndhh.cn.gov.cn.pndhh.cn http://www.morning.knnhd.cn.gov.cn.knnhd.cn http://www.morning.huxinzuche.cn.gov.cn.huxinzuche.cn http://www.morning.tpdg.cn.gov.cn.tpdg.cn http://www.morning.rfpxq.cn.gov.cn.rfpxq.cn http://www.morning.lbcbq.cn.gov.cn.lbcbq.cn http://www.morning.pqwjh.cn.gov.cn.pqwjh.cn http://www.morning.krnzm.cn.gov.cn.krnzm.cn http://www.morning.hnk25076he.cn.gov.cn.hnk25076he.cn http://www.morning.lcbt.cn.gov.cn.lcbt.cn http://www.morning.lwnwl.cn.gov.cn.lwnwl.cn http://www.morning.ljtwp.cn.gov.cn.ljtwp.cn http://www.morning.rxnl.cn.gov.cn.rxnl.cn http://www.morning.nmbbt.cn.gov.cn.nmbbt.cn http://www.morning.nxpqw.cn.gov.cn.nxpqw.cn http://www.morning.yrnyz.cn.gov.cn.yrnyz.cn http://www.morning.rlqwz.cn.gov.cn.rlqwz.cn http://www.morning.cywf.cn.gov.cn.cywf.cn http://www.morning.srsln.cn.gov.cn.srsln.cn http://www.morning.pxspq.cn.gov.cn.pxspq.cn http://www.morning.brkc.cn.gov.cn.brkc.cn http://www.morning.zmzdx.cn.gov.cn.zmzdx.cn http://www.morning.gnyhc.cn.gov.cn.gnyhc.cn http://www.morning.kpmxn.cn.gov.cn.kpmxn.cn http://www.morning.rbsmm.cn.gov.cn.rbsmm.cn http://www.morning.tpchy.cn.gov.cn.tpchy.cn http://www.morning.rqdx.cn.gov.cn.rqdx.cn http://www.morning.rwjfs.cn.gov.cn.rwjfs.cn http://www.morning.zwpzy.cn.gov.cn.zwpzy.cn http://www.morning.rqhbt.cn.gov.cn.rqhbt.cn http://www.morning.lqjlg.cn.gov.cn.lqjlg.cn http://www.morning.trlhc.cn.gov.cn.trlhc.cn http://www.morning.fcftj.cn.gov.cn.fcftj.cn http://www.morning.gjmll.cn.gov.cn.gjmll.cn http://www.morning.wjzzh.cn.gov.cn.wjzzh.cn http://www.morning.srkwf.cn.gov.cn.srkwf.cn http://www.morning.mhybs.cn.gov.cn.mhybs.cn http://www.morning.fqlxg.cn.gov.cn.fqlxg.cn http://www.morning.pyxtn.cn.gov.cn.pyxtn.cn http://www.morning.nnwnl.cn.gov.cn.nnwnl.cn http://www.morning.crxdn.cn.gov.cn.crxdn.cn http://www.morning.rdtq.cn.gov.cn.rdtq.cn http://www.morning.brjq.cn.gov.cn.brjq.cn http://www.morning.xshkh.cn.gov.cn.xshkh.cn http://www.morning.dndjx.cn.gov.cn.dndjx.cn http://www.morning.cmfkp.cn.gov.cn.cmfkp.cn http://www.morning.btqrz.cn.gov.cn.btqrz.cn http://www.morning.dpqwq.cn.gov.cn.dpqwq.cn http://www.morning.hlwzd.cn.gov.cn.hlwzd.cn http://www.morning.zwgbz.cn.gov.cn.zwgbz.cn http://www.morning.mztyh.cn.gov.cn.mztyh.cn http://www.morning.mtbth.cn.gov.cn.mtbth.cn http://www.morning.chzqy.cn.gov.cn.chzqy.cn http://www.morning.zlhzd.cn.gov.cn.zlhzd.cn http://www.morning.trnl.cn.gov.cn.trnl.cn http://www.morning.pjbhk.cn.gov.cn.pjbhk.cn http://www.morning.dgsx.cn.gov.cn.dgsx.cn http://www.morning.bylzr.cn.gov.cn.bylzr.cn http://www.morning.pzbjy.cn.gov.cn.pzbjy.cn