2017-08-08 215 views
1

我有一個大量的批處理文件,我分成幾個較小的文件,一個主文件分別調用每個較小的文件。爲了整潔,我將各個腳本放置在項目文件夾的子文件夾中(主腳本位於項目文件夾中)。獲取父級子文件夾的相對路徑

但是,這已經造成了一個問題 - 我無法弄清楚如何改變新的單獨腳本中的某些路徑。這裏是大約什麼佈局,如:

Project 
|---MasterScript.bat 
| 
|---Scripts 
| |---scriptA.bat 
| 
|---Exes 
| |---program.exe 
| |---config.xml 

所以主腳本調用每個批處理腳本的 - A和腳本A與參數/config config.xml調用program.exe

問題是如何解決program.exe和​​3210。

不幸的是,我不知道如何解決這些批處理文件路徑的問題,所以從字面上不知道如何使用父文件夾等關係編寫相對路徑。

所以基本上我總是問如何編寫相關批處理路徑,特別是如何編寫這些路徑。

+0

在批處理腳本'scriptA.bat'中寫'〜dp0 .. \ Exes \ program.exe'指向'program.exe';在命令提示符窗口中輸入'call /?'來查找'%〜dp0'的含義。 – aschipfl

回答

0

%~dp0擴展到參數0的驅動器和路徑,它是批處理文件本身。此文件路徑引用始終擴展爲帶反斜槓的路徑。試用它與僅含有

@echo off 
echo Batch file path is: "%~dp0" 
pause 

如何引用一個批處理文件的參數(參數,選項)在有或無改性劑幫助輸出被描述在幾個顯示裝置上運行的一個命令提示窗口call /?一個批處理文件頁面。

短期相對路徑教程:

  1. 路徑開始與目錄或文件名的名稱是相對於當前目錄

  2. .\開頭的路徑也相對於當前目錄

  3. ..\開頭的路徑引用當前目錄的父目錄

  4. \開始的路徑相對於當前DRIVE的根目錄。
    例如,\Windows在當前驅動器的根目錄中引用目錄Windows,而不依賴於當前目錄是哪個目錄。

.\..\也可以用一個或更多次的路徑中幾乎任何地方。 .\..\不能用於驅動字母和冒號,因爲這意味着在當前目錄或父目錄中指定了一個目錄,其中包含名稱不可用的冒號。

按順序使用..\..\或甚至更多..\有助於在相對於當前目錄的目錄結構中向上引用2個或多個目錄。

在剛剛運行的應用程序上使用~dp0..\Exes\program.exe絕對有效。

在傳遞給應用程序或腳本的參數中引用具有絕對路徑組件和相對路徑組件的混合的其他目錄或文件也沒有問題。

但是,如果在將目錄或文件名與路徑傳遞給應用程序或腳本之前,通過純相對路徑或絕對路徑和相對路徑的混合確定真正的絕對完整路徑,以獲得更好的可讀警告並且包含傳遞的目錄/文件名稱的錯誤消息。

命令FOR可用於從相對路徑或絕對路徑和相對路徑的混合中獲取目錄或文件的完整路徑。

例子:

@echo off 
for /F %%I in ("%~dp0..\Exes") do set "FullExesPath=%%~fI" 
echo Path to project executables: "%FullExesPath%" 
pause 

注:沒有在這個解決路徑的末尾沒有反斜槓。在文件引用中使用%FullExesPath%時,必須在此目錄引用和文件名之間鍵入反斜槓,以便字符串更易於閱讀。

有關命令的詳細信息對於在命令提示符窗口for /?中運行並仔細閱讀輸出幫助頁面。