2010-06-09 82 views
2

我在Windows命令行中並希望變量中的父文件夾。如何在命令提示符下獲取父文件夾的名稱?

假設當前目錄是「C:\ foo \ bar」,我怎樣才能得到值「bar」?

我在期待類似於「在CD中查找最後一個反斜槓,就是這樣」。

請,沒有PowerShell參考;我想要簡單的舊Windows命令行操作。

回答

6

我的解決方案使用替代和根目錄的作品,以及:

call set PARENT_DIR=%CD% 
set PARENT_DIR=%PARENT_DIR:\= % 
set LAST_WORD= 
for %%i in (%PARENT_DIR%) do set LAST_WORD=%%i 
echo %LAST_WORD% 
+0

你打敗了我,你有一個更好的解決方案 - 我不知道我的根文件夾的作品。 – 2010-06-09 09:50:26

3

這似乎是讓當前目錄名,並將其存儲在環境變量bar

for %i in (%CD%) do set bar=%~ni 

這工作,因爲%CD%包含當前目錄,%~n條for循環(循環的輸出一個值,%CD%)添加到'文件名'部分。

(請注意,如果你在一個批處理文件中使用此,使用%%i%%~ni代替。)

這不,但是,對於一個驅動器的根目錄下工作,這反而未設置bar ,因爲%~ni將評估爲無。

+0

如果文件夾名稱包含句點(句號),它也會中斷文件夾名稱。但除此之外,它是王牌! – 2010-06-09 08:10:57

+0

使用'%〜nxi'來支持帶擴展名的目錄。 – binki 2017-10-27 17:46:22

+0

如果有空格,則不起作用。當我寫道:'FOR/F「delims =」%% i IN(「%CD%」)DO SET bar = %%〜nxi'時,我得到了它的工作原理(雙'''',因爲在批處理文件中) – binki 2017-10-27 17:54:42

1

PMOD有一個整潔的解決方案;我不確定我的作品是否適用於根文件夾。但我想我會把它包含在這裏供人們看。

set myPath=%cd% 
pushd .. 
set parentPath=%cd% 
popd 
echo myPath = "%myPath%" 
echo parentPath = "%parentPath%" 
call set myDir=%%myPath:%parentPath%\=%% 
echo myDir = "%myDir%" 
0

@ PMOD的答案(我缺乏代表評論)可用於根目錄下工作,但如果有在名稱中使用空格這是行不通的。

這是一個稍微改進的版本(在拆分之前用/代替空格,然後在完成時用逆代替)。

call set PARENT_DIR=%CD% 
set PARENT_DIR=%PARENT_DIR: =/% 
set PARENT_DIR=%PARENT_DIR:\= % 
set LAST_WORD= 
for %%i in (%PARENT_DIR%) do set LAST_WORD=%%i 
set LAST_WORD=%LAST_WORD:/= % 
echo %LAST_WORD% 
相關問題