我在Windows命令行中,并希望将父文件夹放在变量中。
假设当前目录是“C:\ foo \ bar”,如何获取值“bar”?
我期待像“在CD中找到最后一个反斜杠那样的东西”。
并请,没有powershell引用;我想要简单的旧Windows命令行操作。
答案 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%