在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,但这不是问题。
答案 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
来读取批处理文件的完整路径。