您正在处理的程序可能有点晚了,但这里是使用Mono.Options的方法
static void Main(string[] args)
{
//let's try this mono.options thing shall we?
string xapfile = null;
var files = new List<string>();
var p = new Mono.Options.OptionSet()
{
{ "xap=", v => xapfile =v },
{ "file:", v => files.Add(v)}
};
List<string> extra = p.Parse(args);
Console.WriteLine(@"
xap = '{0}',
file(s)= {1}",
xapfile,
string.Join(",", files.ToArray())
);
Console.WriteLine(@"
left overs: {0}",
string.Join(Environment.NewLine, extra.ToArray())
);
// rest of your Main here
调用语法将是
myapp.exe --file="file 1" --file="file 2" --file="file 3"
你甚至可以放弃整个 files 变量,只将剩余的文件视为文件,然后将其命名为myapp.exe "file 1" "file 2" "file 3"
并将文件从额外列表中提取出来。
Mono.Options 非常强大。您甚至不必使用 --,看来您可以使用/file=
或-file=
不幸的是,Windows 不会为您执行 globbing(除非您将选项传递给 powershell cmdlet),因此您必须自己完成。不过这很简单,这是我过去用来扩展*.foo
或扩展的一些代码"c:\temp\*.bar|c:\temp\*.txt"
此外,除非您将文件名包含在对讲机中,否则我可能不会用逗号分隔列表,因为逗号在文件名中有效。您知道有一天会咬您一口 :-) Pipe 是一个不错的选择,但前提是您将整个表达式包裹在对讲机中,否则 windows 会认为您在做管道。啊,命令行处理的乐趣:-)