2011-12-08 74 views
1

例如,如果提供的exe的完整文件路徑爲C:\Projects\Executable\Serial Data Streaming Recorder.exe,我需要提取exe的名稱。這是Serial Data Streaming Recorder,我想動態地將這個值從exe的完整文件路徑中分配給一個變量。如何從exe的完整路徑獲取Innosetup腳本中exe的名稱?

手動喜歡做在下面的例子:

#define ExePath "C:\Projects\Executable\Serial Data Streaming Recorder.exe" 
#define AppName "Serial Data Streaming Recorder" 

我想動態值Serial Data Streaming Recorder從exe文件的完整文件路徑賦給變量AppName

我在許多文件的inno腳本中的許多地方使用這個名稱,所以我不想通過將該值賦給變量手動執行此操作。

回答

0

嗯......我通常在我的安裝腳本中永遠不使用任何絕對路徑來解決這個問題。你也可以定義ExePath這樣的:

#define BasicName "Serial Data Streaming Recorder" 
#define ExePath "C:\Projects\Executable\" + BasicName + ".exe" 

然後用{#BasicName}時,你只需要名稱。

還有幾個預處理腳本函數(不是pascalscript)可以做字符串操作來做更高級的東西。

+0

的#define MyExePath 「C:\可執行\串行數據流Recorder.exe」
的#define MyAppExeName ExtractFileName(MyExePath) 的#define MyAppName複製(MyAppExeName,1,位置( 「EXE」,MyAppExeName) - 1) 我解決它這樣........ :) – SamuelJames84

+1

@ SamuelJames84:這就是我說的... – Deanna

2

要在運行時在[Code]中執行此操作您可以使用ExtractFileName()獲取文件名和擴展名。我想你可以通過給ChangeFileExt()函數傳遞空白來刪除擴展名,但如果沒有,可以使用標準字符串操作(如Pos()Delete())來找到並刪除它。

如果你需要在編譯的時候要做到這一點,你需要使用ISPP,大部分功能具有相同的名稱和簽名,以便使用ExtractFileName()獲取文件名本身,RPos()拿到週期和Delete()將其刪除。

+0

感謝您的答覆。我無法使用ChangeFileExt()更改刪除文件擴展名,它會返回「。」。在名字的末尾。 可能爲我提供了一些方法來刪除最後4個字符,但我仍然給予了榮譽。 – SamuelJames84

+0

我做了,在ISPP中使用'RPos()'和'Delete()'。 – Deanna