写个C#命令行参数解析的小工具
最近测试工作做的比较多因此时常要创建一些控制台类型的应用程序。因为程序有不同的参数开关,需要在程序启动的时候通过命令行来给程序传递各种开关和参数。直接操作args有些不方便,所以就写了个解析参数的小工具来处理各种参数。
参数实体:
public class CommandLineArgument
{
List<CommandLineArgument> _arguments; int _index; string _argumentText; public CommandLineArgument Next
{
get {
if (_index < _arguments.Count - ) {
return _arguments[_index + ];
} return null;
}
}
public CommandLineArgument Previous
{
get {
if (_index > )
{
return _arguments[_index - ];
} return null;
}
}
internal CommandLineArgument(List<CommandLineArgument> args, int index, string argument)
{
_arguments = args;
_index = index;
_argumentText = argument;
} public CommandLineArgument Take() {
return Next;
} public IEnumerable<CommandLineArgument> Take(int count)
{
var list = new List<CommandLineArgument>();
var parent = this;
for (int i = ; i < count; i++)
{
var next = parent.Next;
if (next == null)
break; list.Add(next); parent = next;
} return list;
} public static implicit operator string(CommandLineArgument argument)
{
return argument._argumentText;
} public override string ToString()
{
return _argumentText;
}
}
参数解析器:
public class CommandLineArgumentParser
{ List<CommandLineArgument> _arguments;
public static CommandLineArgumentParser Parse(string[] args) {
return new CommandLineArgumentParser(args);
} public CommandLineArgumentParser(string[] args)
{
_arguments = new List<CommandLineArgument>(); for (int i = ; i < args.Length; i++)
{
_arguments.Add(new CommandLineArgument(_arguments,i,args[i]));
} } public CommandLineArgument Get(string argumentName)
{
return _arguments.FirstOrDefault(p => p == argumentName);
} public bool Has(string argumentName) {
return _arguments.Count(p=>p==argumentName)>;
}
}
在项目中引入这两个类就可以在Main函数里对args做相应的解析和操作了。
例如有控制台应用Example,在命令行中输入:
Example.exe -u MrJson -p admin123
在Example的Main函数里处理args:
static void Main(string[] args)
{
var arguments = CommandLineArgumentParser.Parse(args); if (arguments.Has("-u"))
{
Console.WriteLine("用户名:{0}", arguments.Get("-u").Next);
} if (arguments.Has("-p"))
{
Console.WriteLine("密码:{0}", arguments.Get("-p").Next);
}
}
如果参数后面要传多个值,例如下面这个例子,-chpwd参数需要两个参数:
Example.exe -chpwd admin888 admin999
那么,就可以这样处理:
if(arguments.Has("-chpwd"))
{
var arg = arguments.Get("-chpwd");
var oldPwd = arg.Take();
var newPwd = arg.Take().Take();
// 或者
var pwds = arg.Take();
oldPwd = pwds.First();
newPwd = pwds.Last();
Console.WriteLine("原密码:{0} 新密码:{1}", oldPwd, newPwd);
}
That's all.
写个C#命令行参数解析的小工具的更多相关文章
- python命令行参数解析模块argparse和docopt
http://blog.csdn.net/pipisorry/article/details/53046471 还有其他两个模块实现这一功能,getopt(等同于C语言中的getopt())和弃用的o ...
- golang-flag - 命令行参数解析
flag - 命令行参数解析 在写命令行程序(工具.server)时,对命令参数进行解析是常见的需求.各种语言一般都会提供解析命令行参数的方法或库,以方便程序员使用.如果命令行参数纯粹自己写代码解析, ...
- Python 中命令行参数解析工具 docopt 安装和应用
什么是 docopt? 1.docopt 是一种 Python 编写的命令行执行脚本的交互语言. 它是一种语言! 它是一种语言! 它是一种语言! 2.使用这种语言可以在自己的脚本中,添加一些规则限制. ...
- gflags命令行参数解析
gflags库是google开源的命令行参数解析工具. 安装 官方没有提供二进制库,但是Debian/Ubuntu平台本身提供了二进制库,可以直接git clone https://github.co ...
- [Go] 命令行参数解析包(flag 包)使用详解
Go 的 flag 包可以解析命令行的参数. 一.命令行语法 命令行语法主要有以下几种形式: cmd -flag // 只支持bool类型 cmd -flag=xxx cmd -flag ...
- $命令行参数解析模块argparse的用法
argparse是python内置的命令行参数解析模块,可以用来为程序配置功能丰富的命令行参数,方便使用,本文总结一下其基本用法. 测试脚本 把以下脚本存在argtest.py文件中: # codin ...
- Google开源命令行参数解析库gflags
Google开源命令行参数解析库gflags http://blog.csdn.net/lming_08/article/details/25072899 CMDLINE的解析 http://blog ...
- PHP 命令行参数解析工具类
<?php/** * 命令行参数解析工具类 * @author guolinchao * @email luoyecb@163.com */class CommandLine{ // store ...
- Python命令行参数解析模块getopt使用实例
Python命令行参数解析模块getopt使用实例 这篇文章主要介绍了Python命令行参数解析模块getopt使用实例,本文讲解了使用语法格式.短选项参数实例.长选项参数实例等内容,需要的朋友可以参 ...
随机推荐
- CSS 重设文章
CSS 重设 http://blog.bingo929.com/css-reset-collection.html
- 【腾讯Bugly干货分享】Android ImageView 正确使用姿势
本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5832602d7196970d65901d76 导语 本文主要介绍了ImageV ...
- Python黑帽编程2.4 流程控制
Python黑帽编程2.4 流程控制 本节要介绍的是Python编程中和流程控制有关的关键字和相关内容. 2.4.1 if …..else 先上一段代码: #!/usr/bin/python # - ...
- 简单的JavaScript互斥锁
去年有几个项目需要使用JavaScript互斥锁,所以写了几个类似的,这是其中一个: //Published by Indream Luo //Contact: indreamluo@qq.com / ...
- 跨域获取json一些理解[腾讯电商数据的拉取方式]
如何跨域获取json数据源?我们都知道要有callback,具体callback是如何工作的呢?如果服务器端不接收callback,我们是不是就没有办法处理了呢?读完本文后相信你会有一个大体的了解. ...
- [ASP.NET MVC 小牛之路]15 - Model Binding
Model Binding(模型绑定)是 MVC 框架根据 HTTP 请求数据创建 .NET 对象的一个过程.我们之前所有示例中传递给 Action 方法参数的对象都是在 Model Binding ...
- 每天一个linux命令(48):watch命令
watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行.在Linux下,watch是周期性的执行下个 ...
- Struts2-修改数据
<body> 用户信息:<br><br> <% List<User> lu = (List<User>)request.getAttr ...
- KnockoutJS 3.X API 第六章 组件(1) 组件和自定义元素 - 概述
Components (组件)是一个强大的,干净的方式组织您的UI代码,可重复使用的块. : -可以表示单独的控件/窗口小部件或应用程序的整个部分 -包含自己的视图,通常(但可选)自己的视图模型 -可 ...
- jsp通过易宝方式实现在线支付
项目下载地址: https://github.com/hjzgg/OnlinePayment 参考:http://blog.csdn.net/jadyer/article/details/738025 ...