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

发布于 2024-09-05 06:27:19 字数 161 浏览 3 评论 0原文

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

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

我期待类似“在 CD 中找到最后一个反斜杠,仅此而已”。

请不要引用 powershell;我想要普通的旧 Windows 命令行操作。

I'm in a Windows Command Line and want the parent folder in a variable.

Assuming current directory is "C:\foo\bar", how can I get the value "bar"?

I'm expecting something like a "find last backslash in CD and that's it".

And please, no powershell references; I want plain old Windows Command Line operations.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

余罪 2024-09-12 06:27:19

我的解决方案使用替换并且也适用于根目录:

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%

My solution uses substitution and works for root directory as well:

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%
情深已缘浅 2024-09-12 06:27:19

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

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

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

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

但是,这不适用于驱动器的根目录,它会取消设置 bar,因为 %~ni 的计算结果为空。

This appears to get the current directory name, and stores it in the environment variable bar:

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

This works because %CD% contains the current directory, and %~n strips the output of the for loop (looping for one value, %CD%) to the 'file name' portion.

(Note, if you're using this in a batch file, use %%i and %%~ni instead.)

This doesn't, however, work for the root directory of a drive, it will instead unset bar, as %~ni will evaluate to nothing.

自由如风 2024-09-12 06:27:19

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

@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%
酷遇一生 2024-09-12 06:27:19

Pmod 有一个更简洁的解决方案;我不确定我的是否适用于根文件夹。但我想我应该把它放在这里供人们查看。

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

Pmod has a neater solution; I'm not sure mine works for root folders. But I thought I'd include it here for people to see.

set myPath=%cd%
pushd ..
set parentPath=%cd%
popd
echo myPath = "%myPath%"
echo parentPath = "%parentPath%"
call set myDir=%%myPath:%parentPath%\=%%
echo myDir = "%myDir%"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文