2013-05-16 65 views
1

在delphi中有一種方法可以確定在哪個文件夾中調用.exe的批處理文件?如何在Delphi中調用批處理文件的路徑?

例如有2個文件夾和一個批處理文件:

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

而且批處理文件的代碼是:

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

然後在Delphi我只想找到「文件\ data.dat文件「作爲commandArgs [0]。有沒有一種方法可以確定批處理文件從哪裏調用我,以便我可以構建完整路徑?

我知道我可以在批處理文件中寫:

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

在這種情況下,批處理文件解析路徑,並通過完整路徑德爾福,但沒有那這個問題。

+0

我不明白這個問題。 '%〜dp0'爲您提供了執行批處理文件的路徑,所以我很困惑您遇到了什麼問題。你能詳細闡述一下你真正想傳遞給'-open'參數嗎? – TLama

+0

問題很簡單,我可以知道批處理文件所在的位置哪個叫我嗎?事情是,我不寫批處理文件。我想爲編寫批處理文件的用戶提供便利,以便他不必知道任何有關隱祕批處理命令的知識,即使在這種情況下它很簡單。 – thalm

+0

這沒有任何意義。 'ExtractFilePath(ParamStr這(0))'? – OnTheFly

回答

2

在delphi中有沒有一種方法可以確定批處理文件在哪個文件夾中調用.exe?

這取決於。如果您知道該批處理文件住在其中包含可執行文件的目錄的父目錄,那麼你可以這樣做:

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

在另一方面,如果你有批處理文件的生活在那裏沒有專業知識關於可執行文件,那麼沒有簡單的方法來確定它的位置。你不能期望從工作目錄中解決問題,因爲通常情況下,它可能不是包含批處理文件的目錄。

因此,如果您不控制批處理文件,那麼您不能期望輕鬆可靠地找到它。更重要的是,我不知道如何確保甚至有批處理文件。該程序可能大概是由其他一些機制啓動的。

+0

這是正確的......尋找批處理文件路徑的努力與解釋用戶如何編寫批處理文件無關。謝謝。 – thalm

1

通過使用

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

從批處理文件,進程開始運行program.exe應該複製當前文件夾,所以在這種情況下,你可以使用GetCurrentDir讀取批處理文件的完整路徑。

+0

謝謝,我會嘗試是否這給了我的批處理文件或exe文件的工作目錄... – thalm

+0

@thalm這是你的德爾福進程的工作目錄,無論發生什麼。 –

+0

我默默地認爲批處理文件的當前路徑將是批處理文件所在的文件夾,因爲當以不同的文件夾作爲當前路徑啓動時它不起作用,因爲它使用相對路徑來調用exe文件。 –

2

如果bat文件啓動你的exe,那麼cmd.exe是父進程,批處理文件名可能是此cmd.exe的cmdline。如果這是真的,就用Process Explorer開始吧,如果是這樣的話,以編程方式獲得父進程和kt的命令行

+1

cmd進程可能會在子進程嘗試檢查其父項時終止 –

相關問題