2016-12-16 41 views
0

我知道我可以使用下面的代碼來獲取當前的目錄名稱。如何從子文件夾調用批處理文件時獲取當前目錄名稱?

for %%* in (.) do echo %%~nx* 

但是,如果我有這個設置,那不行。

folderA 
    a.bat 
    folderB 
     b.bat 

裏面b.bat,我有:

%~dp0..\a.bat 
a.bat

,我有:

for %%* in (.) do echo %%~nx* 

但輸出folderB可能是因爲當b.bat是執行時,它在該子執行文件夾的上下文。但我想a.bat輸出自己的目錄名稱是folderA

如何做到這一點?

回答

2

a.bat,使用

for /f %%q in ("%~dp0.") do echo %%~nxq 
+0

順便說一句 - 隨着你的結構描述,你從'b.bat'執行'a.bat',所以沒有從'a.bt'返回到'b.bat'。如果您按照您的描述調用'a.bat',則需要'調用%〜dp0 .. \ a.bat'(並且您從發佈中省略了'~')。 – Magoo

1

有可變CD環境總是有當前目錄的路徑。在命令提示符窗口set /?中運行,以便在多個頁面上顯示此命令列表的幫助,還有內置環境變量,如CD,DATETIME,這些變量在運行時看不到,只是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\ 

刪除命令callb.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

相關問題