You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi控制台应用能否获取调用其运行的bat文件所在路径?

问题解答

能否识别程序是由C:\Temp\exec.bat启动的

默认无法直接识别。bat文件属于纯文本脚本,本身不会作为独立进程运行,实际的进程调用逻辑是:系统启动cmd.exe解析bat脚本内容,再由cmd.exe创建你的控制台应用进程,你的程序的直接父进程是cmd.exe。
没有特殊处理的前提下,你无法区分程序是被bat脚本调用启动、是用户手动在cmd窗口输入路径启动,还是用户直接双击exe启动的。

能否获取bat文件所在的C:\Temp路径

分场景判断:

  • 不可靠的默认场景:如果你完全不修改bat文件内容,只有用户直接在资源管理器中双击exec.bat启动程序时,你可以通过GetCurrentDir()拿到工作目录C:\Temp。但如果用户先打开cmd窗口,切换到其他目录后再输入C:\Temp\exec.bat启动,此时程序继承的工作目录是用户切换后的路径,你无法拿到bat所在路径。
  • 可靠实现方案(需要修改bat文件内容):
    • 方案1:将bat所在路径作为参数传递给程序
      bat文件修改为如下内容:
      "C:\Users\User\Documents\Embarcadero\Studio\Projects\Console App Test\Win32\Debug\ConsoleAppTest.exe" "%~dp0"
      
      其中%~dp0是bat内置变量,代表当前bat文件所在的目录(末尾自带反斜杠),你的程序直接读取ParamStr(1)即可获取到C:\Temp路径。
    • 方案2:bat中先切换工作目录再启动程序
      bat文件修改为如下内容:
      @echo off
      cd /d "%~dp0"
      "C:\Users\User\Documents\Embarcadero\Studio\Projects\Console App Test\Win32\Debug\ConsoleAppTest.exe"
      
      不管用户从哪个目录调用bat,都会先把工作目录切换到bat所在目录再启动程序,你直接调用GetCurrentDir()就能拿到C:\Temp路径。

内容的提问来源于stack exchange,提问作者RaelB。

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 10:51:02