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可以捕获%*中的所有参数,但如果参数包含特殊字符,如^^〜@@ &&,则会产生错误的结果
调用Windows API函数GetCommandLine以检索原始命令行.
var
  CmdLine: string;
....
CmdLine := GetCommandLine;
您最好希望永远不需要使用名称中包含空格的破折号的文件!试图说服其他应用程序的作者修复他们的编程是谨慎的.
如果你最终得到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()来检索原始命令行并根据需要自行解析.请记住,除非您的所有参数都以-,或者除非参数被引用,否则您可能会遇到解析空间的问题.这就是引号要处理的内容.