2011-09-23 66 views
4

我有一個目錄如何獲得目錄路徑的一部分在批處理文件

D:\dir1\dir2\getpath.bat 

一個BAT文件,當我運行下面的代碼蝙蝠它打印

D:\dir1\dir2\ 

我只想要路徑D:\dir1\

目錄結構不固定,需要除BAT文件所在的當前目錄以外的完整目錄路徑。

@echo off 
SET SUBDIR=%~dp0 
ECHO %SUBDIR% 

嘗試在for循環中使用delims,但它沒有幫助。

+0

我不認爲我完全理解。你究竟想要做什麼?什麼指定你的「完整的目錄路徑」?假設你將腳本移動到'F:\ other \ bins \ own',你應該輸出什麼內容? 'F:\ other \ bins \','F:\ other \'或其他什麼? – SvenS

+0

@SvenS:我想輸出爲F:\ other \ bin 3號線上的 –

回答

1

如果這是你的腳本駐留在你想要的目錄的父目錄,那麼試試這個:

@echo off 
SET batchdir=%~dp0 
cd /D "%batchdir%.." 
echo %CD% 
cd "%batchdir%" 

(未經測試,請評論,如果有問題)

注意,這當然,如果你的批處理位於你的驅動器根目錄下(如F:\);)如果你想要一個特殊的輸出,如果是這種情況,你應該在echo之前測試%CD%%batchdir%

編輯:應用補丁,請參閱評論由@RichardA

+0

從不同的目錄或不同的驅動器運行時,這項工作是否可行? pushd/popd比保存batchdir簡單嗎? –

+0

哦,你說得對,我會在一個補丁中編輯。 '%〜dp0'不是工作目錄,而是批處理目錄([source](http://www.computerhope.com/forum/index.php?topic=54333.0)),所以你需要cd到該目錄首先(如果這是所期望的)。我真的不能說任何pushd/popd。 – SvenS

0
@echo off 
SET MYDIR=%cd% 
cd %MYDIR%\.. 
SET MYPARENTDIR=%cd% 
cd %MYDIR% 
+0

錯誤= P – Mechaflash

-1

你幾乎是正確的。使用%〜dp0抓取您的.bat的Drive + Full路徑,以便它將返回您的bat文件所在的文件夾。

由於活性直接將你的蝙蝠從運行的目錄,所有你需要做的是:

@echo off 
CD .. 
SET SUBDIR=%CD% 
ECHO %SUBDIR% 

如果把這個在蝙蝠腳本來驗證,扔在上一個PAUSE換行來看你的輸出。

+1

爲什麼活動目錄是蝙蝠運行的目錄?如果他稱之爲活動目錄是c:\,他會運行D:\ dir1 \ dir2 \ getpath.bat?不會直接通過c:\? –

3
@echo off 
setlocal 
SET SUBDIR=%~dp0 
call :parentfolder %SUBDIR:~0,-1% 
endlocal 
goto :eof 

:parentfolder 
echo %~dp1 
goto :eof 
+0

如果'%〜dp0 = C:\ dir1 \ dir2'設置'%SUBDIR:〜0,-1%'會將它變成'C:\ dir1 \ dir'。如果OP在單個編號序列中沒有具有相同名稱的目錄,則這並不能解決他的問題。 – Mechaflash

+1

@Mechaflash:你有沒有嘗試過這樣做?那麼你所說的不是最後一步。值「C:\ dir1 \ dir」被傳遞給另一個執行ECHO的例程。如果您嘗試運行,它會很好地工作 – Arun

+0

我喜歡這個答案。將代碼與setlocal/endlocal括起來以便SUBDIR在批處理文件上下文之外不可用是一種很好的做法。 –

0

的一行代碼做它:-)

如果你想尾隨反斜槓,然後

for %%A in ("%~dp0.") do @echo %%~dpA 


如果您不想尾隨反斜槓,然後

for %%A in ("%~dp0..") do @echo %%~fA 
+0

爲什麼有人會投票呢?它提供了正確的答案,並且從代碼量和性能的角度來看都非常高效。 – dbenham

0

%〜dp0返回當前批處理文件的完整驅動器號和路徑。這可以在一個FOR命令被用於獲得該路徑的各部分:

當從C:\dir1\dir2\dir3\batch.bat

FOR %%V IN ("%~dp0..\") DO @ECHO %%~dpV 

返回C:\dir1\dir2\

這可以被擴展到繼續上漲的路徑運行

FOR %%V IN ("%~dp0..\..\") DO @ECHO %%~dpV 

返回C:\dir1\

Source: Microsoft info on batch parameters

相關問題