我有一個目錄如何獲得目錄路徑的一部分在批處理文件
D:\dir1\dir2\getpath.bat
一個BAT文件,當我運行下面的代碼蝙蝠它打印
D:\dir1\dir2\
我只想要路徑D:\dir1\
目錄結構不固定,需要除BAT文件所在的當前目錄以外的完整目錄路徑。
@echo off
SET SUBDIR=%~dp0
ECHO %SUBDIR%
嘗試在for循環中使用delims,但它沒有幫助。
我有一個目錄如何獲得目錄路徑的一部分在批處理文件
D:\dir1\dir2\getpath.bat
一個BAT文件,當我運行下面的代碼蝙蝠它打印
D:\dir1\dir2\
我只想要路徑D:\dir1\
目錄結構不固定,需要除BAT文件所在的當前目錄以外的完整目錄路徑。
@echo off
SET SUBDIR=%~dp0
ECHO %SUBDIR%
嘗試在for循環中使用delims,但它沒有幫助。
如果這是你的腳本駐留在你想要的目錄的父目錄,那麼試試這個:
@echo off
SET batchdir=%~dp0
cd /D "%batchdir%.."
echo %CD%
cd "%batchdir%"
(未經測試,請評論,如果有問題)
注意,這當然,如果你的批處理位於你的驅動器根目錄下(如F:\
);)如果你想要一個特殊的輸出,如果是這種情況,你應該在echo之前測試%CD%
對%batchdir%
。
編輯:應用補丁,請參閱評論由@RichardA
從不同的目錄或不同的驅動器運行時,這項工作是否可行? pushd/popd比保存batchdir簡單嗎? –
哦,你說得對,我會在一個補丁中編輯。 '%〜dp0'不是工作目錄,而是批處理目錄([source](http://www.computerhope.com/forum/index.php?topic=54333.0)),所以你需要cd到該目錄首先(如果這是所期望的)。我真的不能說任何pushd/popd。 – SvenS
你幾乎是正確的。使用%〜dp0抓取您的.bat的Drive + Full路徑,以便它將返回您的bat文件所在的文件夾。
由於活性直接將你的蝙蝠從運行的目錄,所有你需要做的是:
@echo off
CD ..
SET SUBDIR=%CD%
ECHO %SUBDIR%
如果把這個在蝙蝠腳本來驗證,扔在上一個PAUSE
換行來看你的輸出。
爲什麼活動目錄是蝙蝠運行的目錄?如果他稱之爲活動目錄是c:\,他會運行D:\ dir1 \ dir2 \ getpath.bat?不會直接通過c:\? –
@echo off
setlocal
SET SUBDIR=%~dp0
call :parentfolder %SUBDIR:~0,-1%
endlocal
goto :eof
:parentfolder
echo %~dp1
goto :eof
如果'%〜dp0 = C:\ dir1 \ dir2'設置'%SUBDIR:〜0,-1%'會將它變成'C:\ dir1 \ dir'。如果OP在單個編號序列中沒有具有相同名稱的目錄,則這並不能解決他的問題。 – Mechaflash
@Mechaflash:你有沒有嘗試過這樣做?那麼你所說的不是最後一步。值「C:\ dir1 \ dir」被傳遞給另一個執行ECHO的例程。如果您嘗試運行,它會很好地工作 – Arun
我喜歡這個答案。將代碼與setlocal/endlocal括起來以便SUBDIR在批處理文件上下文之外不可用是一種很好的做法。 –
的一行代碼做它:-)
如果你想尾隨反斜槓,然後
for %%A in ("%~dp0.") do @echo %%~dpA
如果您不想尾隨反斜槓,然後
for %%A in ("%~dp0..") do @echo %%~fA
爲什麼有人會投票呢?它提供了正確的答案,並且從代碼量和性能的角度來看都非常高效。 – dbenham
%〜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\
我不認爲我完全理解。你究竟想要做什麼?什麼指定你的「完整的目錄路徑」?假設你將腳本移動到'F:\ other \ bins \ own',你應該輸出什麼內容? 'F:\ other \ bins \','F:\ other \'或其他什麼? – SvenS
@SvenS:我想輸出爲F:\ other \ bin 3號線上的 –