1

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,但这不是问题。

4

3 回答 3

2

delphi有没有办法确定批处理文件在哪个文件夹中调用.exe?

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

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

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

因此,如果您不控制批处理文件,那么您就不能期望轻松可靠地找到它。更重要的是,我不确定您如何确定甚至存在批处理文件。该程序可能由其他一些机制启动。

于 2013-05-16T19:01:23.543 回答
2

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

于 2013-05-16T21:52:33.927 回答
1

通过使用

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

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

于 2013-05-16T18:33:32.330 回答