2010-06-09 83 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% 
相关问题