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

时间:2016-03-19 17:56:50

标签: 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,但这没有意义,因为我在另一个程序中使用完全相同的行,并且它工作正常。

BTW:此代码旨在从当前目录路径中删除最后一个文件夹名称。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

@ECHO Off
SETLOCAL
set "dir=%cd%"
:char
set dir=%dir:~0,-1%
IF "%dir:~-1%"=="\" ( goto end ) else ( goto char )
:end
SET di
FOR /f %%a IN ("%cd%") DO SET "dir=%%~dpa"
SET di

GOTO :EOF

set识别分配两侧的 Space ,因此您将当前目录分配给" dir Space "并且dir根本没有设置。

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

这是一种更简单的方法......

答案 1 :(得分:0)

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

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

不需要逐个字符地分割并且正在搜索\

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