如何在命令提示符下获取父文件夹的名称?

时间:2010-06-09 07:40:15

标签: windows command-line command-prompt

我在Windows命令行中,并希望将父文件夹放在变量中。

假设当前目录是“C:\ foo \ bar”,如何获取值“bar”?

我期待像“在CD中找到最后一个反斜杠那样的东西”。

并请,没有powershell引用;我想要简单的旧Windows命令行操作。

4 个答案:

答案 0 :(得分: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%

答案 1 :(得分:3)

这似乎获取当前目录名称,并将其存储在环境变量bar中:

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

这是有效的,因为%CD%包含当前目录,%~n将for循环的输出(循环为一个值,%CD%)剥离到'文件名'部分。< / p>

(注意,如果您在批处理文件中使用此功能,请改用%%i%%~ni。)

但是,这不适用于驱动器的根目录,而是取消设置bar,因为%~ni将评估为空。

答案 2 :(得分:1)

Pmod有一个更整洁的解决方案;我不确定我的工作根文件夹。但是我想我会把它包含在这里供人们看。

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

答案 3 :(得分:1)

@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%