有可變CD
環境總是有當前目錄的路徑。在命令提示符窗口set /?
中運行,以便在多個頁面上顯示此命令列表的幫助,還有內置環境變量,如CD
,DATE
或TIME
,這些變量在運行時看不到,只是set
,它輸出所有當前定義的環境變量。
當前目錄可以與啓動的批處理文件的目錄相同,即雙擊批處理文件時的情況。
但是當前目錄也可以是與批處理文件的目錄不同的任何其他目錄。例如,當前目錄爲%SystemRoot%\System32
,以管理員身份運行批處理文件或以系統帳戶的計劃任務運行。
讓我們假設有C:\folderA\a.bat
使用以下命令行:
@echo off
echo Running %~nx0
echo/
echo Current directory is: %CD%
echo Directory of %~nx0 is: %~dp0
而且有C:\folderA\folderB\b.bat
使用以下命令行:
@echo off
echo Running %~nx0
echo/
echo Current directory is: %CD%
echo Directory of %~nx0 is: %~dp0
echo/
call "%~dp0..\a.bat"
echo/
echo Running again %~nx0
echo/
echo Current directory is: %CD%
echo Directory of %~nx0 is: %~dp0
echo/
for /F %%I in ("%~dp0..\") do echo Batch parent directory is: %%~dpI
for /F %%I in ("%CD%\..\") do echo Current parent directory is: %%~dpI
在批處理文件
C:\folderA\folderB\b.bat
結果輸出
雙擊:
Running b.bat
Current directory is: C:\folderA\folderB
Directory of b.bat is: C:\folderA\folderB\
Running a.bat
Current directory is: C:\folderA\folderB
Directory of a.bat is: C:\folderA\
Running again b.bat
Current directory is: C:\folderA\folderB
Directory of b.bat is: C:\folderA\folderB\
Batch parent directory is: C:\folderA\
Current parent directory is: C:\folderA\
刪除命令call
在b.bat
7線並再次運行b.bat
結果輸出:
Running b.bat
Current directory is: C:\folderA\folderB
Directory of b.bat is: C:\folderA\folderB\
Running a.bat
Current directory is: C:\folderA\folderB
Directory of a.bat is: C:\folderA\
沒有返回到b.bat
在到達的a.bat
端不使用call
。
接下來,讓我們看看在輸出上運行b.bat
第7行再次call
具有C:\Windows\System32
用命令行C:\folderA\folderB\b.bat
:
Running b.bat
Current directory is: C:\Windows\system32
Directory of b.bat is: C:\folderA\folderB\
Running a.bat
Current directory is: C:\Windows\system32
Directory of a.bat is: C:\folderA\
Running again b.bat
Current directory is: C:\Windows\system32
Directory of b.bat is: C:\folderA\folderB\
Batch parent directory is: C:\folderA\
Current parent directory is: C:\Windows\
注意:環境變量
路徑當前目錄保持的CD
末尾沒有反斜槓,只有一個例外:當前目錄是驅動器的根目錄。在這種情況下,CD
例如是C:\
而不是僅僅C:
。
使用%~dp0
時請考慮In Batch file ~dp0 changes on changing directory。
順便說一句 - 隨着你的結構描述,你從'b.bat'執行'a.bat',所以沒有從'a.bt'返回到'b.bat'。如果您按照您的描述調用'a.bat',則需要'調用%〜dp0 .. \ a.bat'(並且您從發佈中省略了'~')。 – Magoo