Batch file 如何从给定路径中批量删除最后一个文件夹

Batch file 如何从给定路径中批量删除最后一个文件夹,batch-file,Batch File,我有这个代码,但它似乎不工作;我不明白为什么: set dir = %cd% :char set dir=%dir:~0,-1% IF %dir:~-1%=="\" ( goto end ) else ( goto char ) :end 我已经把范围缩小到了底线 set dir=%dir:~0,-1% 这似乎将dir设置为~0,-1,但这没有意义,因为我在另一个程序中使用了完全相同的行,并且工作正常 顺便说一句:此代码旨在从当前目录路径中删除最后一个文件夹名 提前感谢您的帮助。@ECHO O

我有这个代码,但它似乎不工作;我不明白为什么:

set dir = %cd%
:char
set dir=%dir:~0,-1%
IF %dir:~-1%=="\" ( goto end ) else ( goto char )
:end
我已经把范围缩小到了底线

set dir=%dir:~0,-1%

这似乎将
dir
设置为
~0,-1
,但这没有意义,因为我在另一个程序中使用了完全相同的行,并且工作正常

顺便说一句:此代码旨在从当前目录路径中删除最后一个文件夹名

提前感谢您的帮助。

@ECHO Off
SETLOCAL
设置“dir=%cd%”
:char
设置目录=%dir:~0,-1%
如果“%dir:~-1%”=“\”(转到结束)其他(转到字符)
:结束
集di
对于(“%cd%”)中的/f%%a,请设置“dir=%%~dpa”
集di
后藤:EOF
set
识别分配两侧的空间,因此您将当前目录分配给“dirSpace”,而
dir
根本没有设置

您的
if
命令缺少第一个参数周围的引号


这里有一个更简单的方法…

要从给定路径中删除最后一个文件夹名,请使用简单的
for
循环和
~dp
扩展(请参见
以获取/?
):

无需按字符分割并搜索
\

注意:
我建议不要使用变量名
dir
,以避免混淆,因为有一个同名的内部命令

set "FOLDER=%CD%"
for /D %%D in ("%FOLDER%") do (
    set "PARENT=%%~dpD"
)
echo Last folder removed: %PARENT%