在命令行参数中处理含空格的文件名(50分)

  • 主题发起人 主题发起人 laocir
  • 开始时间 开始时间
L

laocir

Unregistered / Unconfirmed
GUEST, unregistred user!
如程序文件:MYAPP.EXE
文本文件:"the file 1.txt"

想要实现使用 MYAPP the file 1.txt 打开文本文件处理,
但系统将文件名分成了三个参数:
ParamStr(1)='the'
ParamStr(2)='file'
ParamStr(3)='1.txt'
请问如何得到完整的文件名?
 
对于含空格的参数要加引号处理
 
不用引号呢?
问题是如何将所有参数连成一个字符串
 
那是没有可能的,命令行传递参数,如果是含有空格的字符串的话,必须用引号括起来,要不谁认识呢。
 
你试试记事本的命令行参数
不加引号
notepad the file 1.txt

完全可以。
不知道是怎么做的?
 
这我就不知道 了,但如果记事本只有一个参数的话,就可以这样,如果有多个参数,那
它怎么识别呢。
 
使用 GetCommandLine() 得到整个命令行,取消paramStr(0) 的内容.
 
多谢tianhf兄:
用GetCommandLine得到的是:
"c:/path/MYAPP.EXE" the file 1.txt
多出两个引号,

我用getcommandline+length(paramstr(0))+3得到后面的参数,
其中“3”指两个引号和一个空格,
但如果空格多于一个,如何处理?
有没有更好的办法?
 
function getparam:string;
var i:integer;
s:string;
begin
s:='';
for i:=1 to paramcount do
s:=s+paramstr(i)
result:=s;
end;
 
不好意思,原来的程序有小BUG,现改为

function getparam:string;
var i:integer;
s:string;
begin
s:='';
for i:=1 to paramcount do
if i<>paramcount then s:=s+paramstr(i)+' ' else s:=s+paramstr(i);
result:=s;
end;
 
正确答案:
s:=trim(strPas(getCommandLine()+length(paramStr(0))+3));
白河愁的答案不能处理多个连续空格!
 
多人接受答案了。
 
后退
顶部