如何使用Windows命令提示符删除空文件夹?

问题描述 投票:0回答:12

我需要使用 Windows 命令提示符从我的应用程序文件夹中删除所有空文件夹?

如何创建这样的bat文件?

请帮助我。

windows command-line command directory
12个回答
161
投票

您可以使用

ROBOCOPY
命令。它非常简单,也可用于删除大型层次结构中的空文件夹。

ROBOCOPY folder1 folder1 /S /MOVE

这里源和目标都是

folder1
,因为您只需要删除空文件夹,而不是将其他(必需)文件移动到不同的文件夹。
/S
选项是跳过复制(移动 - 在上述情况下)空文件夹。由于文件移动到同一驱动器内,速度也更快。


64
投票

更简单的方法是使用 /s 开关执行 xcopy 来复制整个目录结构。 /s 的帮助说复制目录和子目录(空目录除外)。

xcopy dirA dirB /S

其中 dirA 是带有空文件夹的源。 DirB 将是没有空文件夹的副本


59
投票
for /f "usebackq" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"

来自:http://blogs.msdn.com/b/oldnewthing/archive/2008/04/17/8399914.aspx

当然,在执行该命令之前,我会先测试它而不删除。另外,这是评论中的修改版本,其中包括带空格的文件夹:

 for /f "usebackq delims=" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"

附注博客文章中还有更多评论可能会对您有所帮助,因此在尝试之前也请务必阅读这些评论


17
投票

你不需要usebackq:

FOR /F delims^= %%A IN ('DIR/AD/B/S^|SORT/R') DO RD "%%A"

8
投票

从同一引用页面添加到腐蚀的答案是 PowerShell 版本 http://blogs.msdn.com/b/oldnewthing/archive/2008/04/17/8399914.aspx#8408736

Get-ChildItem -Recurse . | where { $_.PSISContainer -and @( $_ | Get-ChildItem ).Count -eq 0 } | Remove-Item

或者,更简洁地说,

gci -R . | where { $_.PSISContainer -and @( $_ | gci ).Count -eq 0 } | ri

感谢发帖作者


5
投票

从命令行: 对于 (*) 中的 /R /D %1 执行 rd“%1”

在批处理文件中 for /R /D %%1 in (*) do rd "%%1"

我不知道它是否有这样的记录,但它适用于 W2K、XP 和 Win 7。我不知道它是否总是有效,但它永远不会意外删除文件。


3
投票

这是上述的混合体。它会删除超过 X 天的所有文件,并删除给定路径的所有空文件夹。使用时只需设置日期、文件夹路径和驱动器

@echo off
SETLOCAL
set days=30
set folderpath=E:\TEST\
set drive=E:

::Delete files
forfiles -p %folderpath% -s -d -%days% -c "cmd /c del /q @path "

::Delete folders
cd %folderpath%
%drive%
for /f "usebackq delims=" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"`

3
投票

它会工作得很好。这是删除旧文件并递归删除空目录的最佳方法。 以下 .bat 文件是,

forfiles /p [PATH] /s /m [FILE-PATTERN] /d -[DAYS] /c "cmd /c del @path"
for /f "delims=" %%d in ('dir [PATH] /s /b /ad ^| sort /r') do rd "%%d"

占位符需要替换如下(不带引号):

[DAYS] = Max. age of the files in days, e.g. “10”
[PATH] = Path to search for old files and empty folders, e.g. “C:\Backup\”
[FILE-PATTERN] = Pattern that matches files to delete, e.g. “*.bkp”

该脚本已在Windows 7和Windows Server 2003下成功测试。


2
投票

安装适用于 Windows 的任何 UNIX 解释器(Cygwin 或 Git Bash)并运行 cmd:

找到/path/to/directory -empty -type d

To find them

查找/路径/到/目录-空-type d -删除

To delete them

(并不是真正使用 Windows cmd 提示符,但它很简单,只需几秒钟即可运行)


1
投票

更现代、更简单的解决方案是:

forfiles /p C:\Path\To\Folder /c "cmd /c if @isdir==TRUE rd @file"

这将尝试在位于

rd
的所有目录上执行
C:\Path\To\Folder
。包含内容的目录不会被删除。

如果排除

/p C:\Path\To\Folder
那么它将在当前目录中运行。

如果您添加

/s
(在
/c
之前),那么它也会在子目录中查找。


0
投票
@echo off
set /p "ipa= ENTER FOLDER NAME TO DELETE> "
set ipad="%ipa%"
IF not EXIST %ipad% GOTO notfound
IF EXIST %ipad% GOTO found
:found
echo DONOT CLOSE THIS WINDOW
md ccooppyy
xcopy %ipad%\*.* ccooppyy /s > NUL
rd %ipad% /s /q
ren ccooppyy %ipad%
cls
echo SUCCESS, PRESS ANY KEY TO EXIT
pause > NUL
exit 
:notfound
echo I COULDN'T FIND THE FOLDER %ipad%
pause
exit

0
投票

如果您想在资源管理器上下文菜单(即右键单击)中使用 Varun 的 ROBOCOPY 命令行,这里是 Windows 注册表导入。我尝试将此作为评论添加到他的答案中,但内联标记不可行。

我已在我自己的 Windows 10 PC 上对此进行了测试,但使用风险需您自担。它将打开一个新的命令提示符,运行命令,然后暂停,以便您可以看到输出。

  1. 复制到新的文本文件中:

    Windows 注册表编辑器版本 5.00

    [HKEY_CURRENT_USER\Software\Classes\directory\Background\shell\删除空文件夹

© www.soinside.com 2019 - 2024. All rights reserved.