如何在Delphi中获取调用批处理文件的路径?

时间:2013-05-16 17:31:09

标签: delphi batch-file path

在delphi中是否有办法确定批处理文件在哪个文件夹中称为.exe?

例如,有2个文件夹和一个批处理文件:

c:\application\program.exe
c:\files\data.dat
c:\batch.bat

批处理文件的代码是:

application\program.exe -open "files\data.dat"

然后在Delphi中我只得到“files \ data.dat”作为commandArgs [0]。有没有办法确定批处理文件从何处调用,以便我可以构建完整路径?

我知道我可以在批处理文件中写入:

application\program.exe -open "%~dp0files\data.dat"

在这种情况下,批处理文件解析路径并将完整路径传递给delphi,但这不是问题。

3 个答案:

答案 0 :(得分:2)

  

在delphi中是否有办法确定批处理文件在哪个文件夹中称为.exe?

这取决于。如果您知道批处理文件位于包含可执行文件的目录的父目录中,那么您可以这样做:

ExeDir := ExtractFileDir(ParamStr(0));
ParentDir := ExtractFileDir(ExeDir);

另一方面,如果您对批处理文件与可执行文件的位置没有特别的了解,那么就没有简单的方法来确定它的位置。您不能指望从工作目录中解决这个问题,因为通常情况下,这可能是包含批处理文件的目录以外的目录。

因此,如果您不控制批处理文件,那么您不能指望轻松可靠地找到它。更重要的是,我不确定你怎么能确定有一个批处理文件。该计划可能是由其他一些机制启动的。

答案 1 :(得分:2)

如果bat文件正在启动你的exe,则cmd.exe是父进程,批处理文件名可能是此cmd.exe的cmdline。如果这是真的,请先使用Process Explorer启动,如果是,请以编程方式获取父进程和kt的命令行

答案 2 :(得分:1)

使用

application\program.exe -open "files\data.dat"

从批处理文件中,开始运行的进程program.exe应该复制当前文件夹,因此在这种情况下,您可以使用GetCurrentDir来读取批处理文件的完整路径。