如何使用不同的标识符读取ParamStr的值?

Jer*_*dge 4 delphi string-comparison paramstr

当您阅读时ParamStr(),它由每个参数之间的空格所限定。但是,我已经看到许多命令行参数,它们接受参数名称及其配对值之间的空格,同时也接受等号=,甚至不包含任何分隔符(仅以param名称作为前缀)或不包含任何值。

以下是一些可能的参数字符串的示例:

-name value
/name value
-name=value
/name=value
-namevalue
/namevalue
-name -nextname
/name /nextname
-name="value with spaces"
/name="value with spaces"
Run Code Online (Sandbox Code Playgroud)

...等等。

我想做的是两件事都相关...检查参数名称是否存在,并读取参数的值。例如...

if ParamExists('ParamName') then
  SomeString:= ParamValue('ParamName')
else
  SomeString:= 'SomeOtherString';
Run Code Online (Sandbox Code Playgroud)

Delphi中有什么可以做到的吗?如果没有,我该怎么做?我在搜索时发现的所有内容都将我引到相同的基本示例:

for i := 0 to ParamCount do
  ShowMessage(ParamStr(i));
Run Code Online (Sandbox Code Playgroud)

它还需要区分大小写。我正在寻找特别喜欢的东西,OSQL并且类似的命令行工具使用的“ -s”可能不同于“ -S”。

问题是,如果我使用空格作为分隔符,那么我将不知道如何识别它何时是前一个参数的一部分,因为它将空格分隔。我该如何解决?

我敢肯定,这也是一个标准术语,它是命令行参数的常见格式。但我不知道如何使用just正确阅读它们ParamStr。似乎ParamStr没有达到通常的用途。

需要明确的是,我并不一定需要支持上面的每个示例-这些只是我以前见过的示例。

Rem*_*eau 5

ParamStr()(因此FindCmdLineSwitch())不够灵活,无法处理您显示的所有示例。您将必须调用Win32 API GetCommandLine()函数并手动对其进行解析。

  • 您能扩大答案并告诉我们它无法处理哪些问题吗? (3认同)