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可以捕获%*中的所有参数,但如果参数包含特殊字符,例如^^〜@@&& ...
答案 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()
检索原始命令行并根据需要自行解析。请记住,除非所有参数都以-
开头,或者除非参数被引用,否则您可能会遇到解析空间的问题。这就是引号要处理的内容。