我在Windows命令行中并希望变量中的父文件夹。如何在命令提示符下获取父文件夹的名称?
假设当前目录是“C:\ foo \ bar”,我怎样才能得到值“bar”?
我在期待类似于“在CD中查找最后一个反斜杠,就是这样”。
请,没有PowerShell参考;我想要简单的旧Windows命令行操作。
我在Windows命令行中并希望变量中的父文件夹。如何在命令提示符下获取父文件夹的名称?
假设当前目录是“C:\ foo \ bar”,我怎样才能得到值“bar”?
我在期待类似于“在CD中查找最后一个反斜杠,就是这样”。
请,没有PowerShell参考;我想要简单的旧Windows命令行操作。
我的解决方案使用替代和根目录的作品,以及:
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%
这似乎是让当前目录名,并将其存储在环境变量bar
:
for %i in (%CD%) do set bar=%~ni
这工作,因为%CD%
包含当前目录,%~n
条for循环(循环的输出一个值,%CD%
)添加到'文件名'部分。
(请注意,如果你在一个批处理文件中使用此,使用%%i
和%%~ni
代替。)
这不,但是,对于一个驱动器的根目录下工作,这反而未设置bar
,因为%~ni
将评估为无。
PMOD有一个整洁的解决方案;我不确定我的作品是否适用于根文件夹。但我想我会把它包含在这里供人们看。
set myPath=%cd%
pushd ..
set parentPath=%cd%
popd
echo myPath = "%myPath%"
echo parentPath = "%parentPath%"
call set myDir=%%myPath:%parentPath%\=%%
echo myDir = "%myDir%"
@ 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%
你打败了我,你有一个更好的解决方案 - 我不知道我的根文件夹的作品。 – 2010-06-09 09:50:26