有关执行命令行界面的建议
我正在重新设计命令行应用程序,并且正在寻找一种使它的使用更加直观的方法。传递给命令行应用程序的参数格式是否有约定?还是人们发现有用的任何其他方法?
解决方案
-操作[参数]-命令[命令]-其他[otherparams]...。
例如,
YourApp.exe -file %YourProject.prj% -Secure true
如果我们使用的是Ctry Mono.GetOptions,则它是一个非常强大且易于使用的命令行参数解析器。它可以在Mono环境和Microsoft .NET Framework中工作。
编辑:这是一些功能
- 每个参数都有2个CLI表示形式(1个字符和字符串,例如-a或者--add)
- 默认值
- 强类型
- 自动生成带有说明的帮助屏幕
- 自动生成版本和版权屏幕
如果使用标准工具之一来生成命令行界面(如getopts),则将自动遵循。
最好的办法是,如果可以的话,不要假设任何事情。当操作员键入要执行的应用程序名称且没有任何参数时,请使用USAGE块将其击中,或者打开Windows窗体并允许他们输入所需的所有内容。
c:\>FOO FOO USAGE FOO -{Option}{Value} -A Do A stuff -B Do B stuff c:\>
我在宗教主题的标题下放置参数定界:连字符(破折号),双连字符,斜杠,无,位置等。
我们没有指明平台,但是在接下来的评论中,我将假定使用Windows和.net
我们可以在.net中创建基于控制台的应用程序,并通过选择基于控制台的项目,然后添加Windows.Forms,System.Drawing等DLL,允许其使用Forms与桌面进行交互。
我们一直在这样做。这样可以确保没有人掉下来一个黑暗的小巷。
我总是加一个/?参数以获取帮助,我总是尝试使用默认(即最常见的情况)实现。
否则,我倾向于将" / x"用于开关,将" / x:value"用于需要传递值的开关。使使用正则表达式解析参数变得非常容易。
我们为应用程序使用的约定取决于
1)它是什么类型的应用程序。
2)我们正在使用什么操作系统。 Linux的?视窗?他们都有不同的约定。
我的建议是查看系统上其他命令的其他命令行界面,特别注意传递的参数。具有不正确的参数应该给用户解决方案指示错误信息。易于查找的帮助屏幕也可以帮助提高可用性。
在不知道应用程序将要做什么的情况下,很难给出具体的例子。
我喜欢某些CLI的一件事是使用快捷方式。
也就是说,以下所有行都在做同一件事
myCli.exe describe someThing myCli.exe descr someThing myCli.exe desc someThing
这样,用户可能不必每次都键入all命令。
这是一篇CodeProject文章,可能会对我们有所帮助...
C#/。NET命令行参数解析器
如果我们喜欢VB,这里有另一篇文章(还有更多与指南有关的内容)供我们参考...
使用VB.NET解析和验证命令行参数
The conventions that you use for you application would depend on 1) What type of application it is. 2) What operating system you are using.
确实是这样。我不确定dos-prompt约定,但在类似Unix的系统上,常规约定大致如下:
1)格式为
appName parameters
2)单字符参数(例如" x")作为-x传递
3)多字符参数(例如" add-keys")作为--add-keys传递
命令行约定因操作系统而异,但是使用最多的约定和最受公众关注的约定是GNU getopt软件包支持的约定。有关更多信息,请参见http://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html。
它允许我们将单字母命令(例如-nr)与更长的自文档选项(例如--numeric --reverse)混合使用。很好,实现--help(-?)选项,然后用户将可以弄清楚他们需要知道的所有内容。
补充@vonc的答案,不要接受模棱两可的缩写。例如:
myCli.exe describe someThing myCli.exe destroy someThing myCli.exe des someThing ???
实际上,在那种情况下,我可能不会接受" destroy"的缩写。
我看到了许多Windows命令行细节,但是如果程序是针对Linux的,我发现GNU命令行标准是最直观的。基本上,对于命令的长格式(例如-help),它使用双连字符,对于短版本的命令(例如,-h),则使用单个连字符。我们还可以将简短的版本"堆叠"在一起(例如," tar -zxvf"文件名),并根据自己的喜好混合长短匹配项。
GNU网站还列出了标准选项名称。
getopt库大大简化了解析这些命令的过程。如果不是C,Python和Perl都有类似的库。
如果我们使用的是Perl,则可能正是我们所需要的CLI :: Application框架。它使我们可以轻松地使用类似用户界面的SVN / CVS / GIT构建应用程序("命令-o-长选择某些动作以执行某些参数")。
我创建了一个.Net Clibrary,其中包括一个命令行解析器。我们只需要创建一个从CmdLineObject类继承的类,调用Initialize,它将自动填充属性。它可以处理对不同类型的转换(使用项目中还包括的高级转换库),数组,命令行别名,单击一次参数等。它甚至可以自动创建命令行帮助(/?)。
如果我们有兴趣,则该项目的URL为http://bizark.codeplex.com。当前仅作为源代码提供。