Delphi如何将所有参数检索为单个字符串

时间:2014-08-14 17:28:31

标签: delphi parameters

application1运行另一个带有2个参数的application2,例如: (注意:application1不是我的程序)

application2.exe -d:C:\Program Files\app folder -z:Folder menu\app icons

问题是...引号不知何故消失了,所以代替2个参数application2将得到5个参数

Param1=-d:C:\Program
Param2=Files\app
Param3=folder
Param4=-z:Folder menu\app
Param5=app icons

有没有办法将所有参数检索为单个字符串?

我尝试在循环中组合参数

for i:=1 to ParamCount do
parameters=parameters+' '+ParamStr(i);

但这不是一个好的解决方案,因为路径也可以包含双或三个空格 例如

Program files\app   folder\ 

cmd.exe可以捕获%*中的所有参数,但如果参数包含特殊字符,例如^^〜@@&& ...

2 个答案:

答案 0 :(得分:7)

调用Windows API函数GetCommandLine以检索原始命令行。

var
  CmdLine: string;
....
CmdLine := GetCommandLine;

您最好希望永远不需要使用名称中包含空格的短划线的文件!试图说服其他应用程序的作者修改他们的编程是谨慎的。

答案 1 :(得分:6)

如果您最终得到5个参数而不是2个,那是因为application1 DID不引用参数开头,例如:

application2.exe "-d:C:\Program Files\app folder" "-z:Folder menu\app icons"

或者:

application2.exe -d:"C:\Program Files\app folder" -z:"Folder menu\app icons"

假设您无法让application1的作者修复参数,您必须使用GetCommandLine()检索原始命令行并根据需要自行解析。请记住,除非所有参数都以-开头,或者除非参数被引用,否则您可能会遇到解析空间的问题。这就是引号要处理的内容。