【发布时间】:2012-02-27 11:54:21
【问题描述】:
在我的 Delphi 应用程序中,我想添加命令行参数以在登录屏幕中自动设置一些参数。
目前我有一个登录屏幕,用户可以在其中设置一些信息(如服务器、数据库、用户、密码、AuthenticationType、AUtoLogin...)。
我使用 MRU 填充字段。无论如何,在大型组织中,需要不要让用户选择任何信息。为此,在我的场景中我能做的最简单的事情就是使用命令行参数。
我的问题是你建议如何选择命令行参数?我的意思是,我应该采用“定位”方法还是某种“标签”方法,例如:
MyProject.exe -s:MYSERVER -d:DATABASE
或
MyProject.exe MYSERVER DATABASE
在第一种情况下,我需要使用 ParamStr 遍历所有参数并“解码”它们是什么。如果它们以“-s:”开头,我知道后面是服务器名称。第二种更快更脏,但可能更有效。
如何管理包含“空格”的参数?是否可以使用 ParamStr 自动拦截它们,还是应该手动处理? (我的意思是有一种方法可以自动告诉 ParamStr 一个参数包含一个空格(比如使用大括号或其他东西)。
最佳做法是什么?
【问题讨论】:
-
您使用双引号将包含空格的参数括起来。
-
我不知道为什么我尝试了所有组合但没有使用双引号!。谢谢。我注意到一件有趣的事情。如果我写:“-s:服务器名称”和 -s:“服务器名称”,它们在 ParamStr 中被认为是相同的。这很好,因为写“-s:Server Name”不像-s:“Server Name”那样用户友好。
-
第一种方法对您和最终用户来说更方便和容易..“解码”参数您可以使用
TStringList(在每行的开头去掉-符号)并使用它的Valuesproperty 与NameValueSeparator设置为: -
我相信如果需要一个参数,那么它应该是“位置的”。如果它是可选的,那么它应该被“标记”。
-
@Nat 位置参数的缺点是人类读者很难解析它们。当然,这对计算机来说是清楚的,但想想可怜的人类!位置参数还可以使命令行的重构更具挑战性。