【发布时间】:2016-08-07 05:39:19
【问题描述】:
我写了一个小程序,例如有如下命令行:
prog.exe -p -z "E:\temp.zip" -v "f:\" -r -o -s –c
prog.exe -p -z "E:\temp.zip" -v f:\ -r -o -s –c
prog.exe -p -z "E:\temp.zip" -v "f:\log" -r -o -s –c
此命令行由另一个程序生成,该程序自动在文件名和路径名周围插入引号,以防止空格被识别为参数分隔符。
第一个命令行随后被 .Net 框架解析为:
args {string[5]} string[]
[0] "-p" string
[1] "-z" string
[2] "f:\\temp.zip" string
[3] "-v" string
[4] "f:\" -r -o -s -c" string
但应该是(第二个命令行的结果):
args {string[9]} string[]
[0] "-p" string
[1] "-z" string
[2] "f:\\temp.zip" string
[3] "-v" string
[4] "f:\\" string
[5] "-r" string
[6] "-o" string
[7] "-s" string
[8] "-c" string
一个可能的解决方案是检查调用应用程序中的文件和路径名称是否包含空格,然后才在名称周围附加引号。
但是还有其他解决方案吗?
【问题讨论】:
-
有很多很好的库来解决命令行参数,它们也给你解析、帮助、强制参数检查等等。我建议您查看其中之一,而不是推出自己的解决方案。一个例子是github.com/gsscoder/commandline
标签: c# parsing command arguments line