public static CommandArgs Parse(string[] args) { var commandArgs = new CommandArgs(); for (int i = 0; i < args.Length; i++) { var item = args[i]; if (item == "-" || item == "--") { continue; } if (item.StartsWith("-")) { var key = item.Substring(1);//移除 - 或 -- if (key[0] == '-') { key = key.Substring(1); } if (i + 1 < args.Length)//后面是否跟一个值 { var nextItem = args[i + 1]; if (nextItem.StartsWith("-")) { commandArgs.ArgPairs.Add(key, "true");//不是跟一个值,则使用true代替 } else { nextItem = RecoveryValue(nextItem); commandArgs.ArgPairs.Add(key, nextItem); i++; } } else { commandArgs.ArgPairs.Add(key, "true"); } } else { item = RecoveryValue(item); commandArgs.Params.Add(item); } } return commandArgs; }
private static CmdArg GetCmdArg(string[] args, ref string errorMsg) { var cmdArgs = CommandArgs.Parse(args); if (cmdArgs.Params == null || cmdArgs.Params.Count <= 1) { errorMsg = "命令有误!"; return(null); } string cmd = "";//head or tail string path = ""; uint lines = 10; string outputFile = ""; string encoding = ""; string temp = ""; //find args string keyword = ""; string regex = ""; bool readHead = true; bool ignoreCase = false; cmd = cmdArgs.Params[0].Trim().ToLower(); path = cmdArgs.Params[1]; if (string.IsNullOrEmpty(path) || !File.Exists(path)) { errorMsg = "错误:不存在文件 " + path; return(null); } if (cmdArgs.ArgPairs.TryGetValue("n", out temp) || cmdArgs.ArgPairs.TryGetValue("lines", out temp)) { if (!uint.TryParse(temp, out lines)) { errorMsg = "错误:参数 -n 或 --lines 要为整数"; return(null); } } if (cmdArgs.ArgPairs.TryGetValue("o", out temp) || cmdArgs.ArgPairs.TryGetValue("output", out temp)) { outputFile = temp; } if (cmdArgs.ArgPairs.TryGetValue("c", out temp) || cmdArgs.ArgPairs.TryGetValue("encoding", out temp)) { encoding = temp; } if (cmdArgs.ArgPairs.TryGetValue("k", out temp) || cmdArgs.ArgPairs.TryGetValue("keyword", out temp)) { keyword = temp; } if (cmdArgs.ArgPairs.TryGetValue("r", out temp) || cmdArgs.ArgPairs.TryGetValue("regex", out temp)) { regex = temp; } if (cmdArgs.ArgPairs.TryGetValue("t", out temp) || cmdArgs.ArgPairs.TryGetValue("tail", out temp)) { readHead = string.IsNullOrEmpty(temp); } if (cmdArgs.ArgPairs.TryGetValue("i", out temp) || cmdArgs.ArgPairs.TryGetValue("ignoreCase", out temp)) { ignoreCase = !string.IsNullOrEmpty(temp); } return(new CmdArg { CmdName = cmd, Encoding = encoding, FileName = path, Lines = lines, OutputFile = outputFile, IgnoreCase = ignoreCase, Keyword = keyword, ReadHead = readHead, Regex = regex }); }