我在 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
and%%~ni
代替。)
但是,这不适用于驱动器的根目录,它将改为 unset bar
,因为%~ni
将评估为空。
@pmod's answer (I lack the rep to comment) may work for root directories, but it doesn't work if there are spaces in the names.
Here's a slightly improved version (substituting / for space before splitting, then reverse substituting when finished).
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%
Pmod 有一个更简洁的解决方案;我不确定我的是否适用于根文件夹。但我想我会把它放在这里让人们看到。
set myPath=%cd%
pushd ..
set parentPath=%cd%
popd
echo myPath = "%myPath%"
echo parentPath = "%parentPath%"
call set myDir=%%myPath:%parentPath%\=%%
echo myDir = "%myDir%"