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

时间:2011-10-20 04:51:10

标签: windows command-line command directory

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

如何创建这样的bat文件?

请帮帮我。

13 个答案:

答案 0 :(得分:113)

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

ROBOCOPY folder1 folder1 /S /MOVE

此处源和目标均为folder1,因为您只需删除空文件夹,而不是将其他(必需)文件移动到其他文件夹。 /S选项是跳过复制(移动 - 在上面的情况下)空文件夹。当文件在同一个驱动器中移动时,它也会更快。

答案 1 :(得分:56)

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

xcopy dirA dirB /S

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

答案 2 :(得分:49)

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"

P.S。博客文章中有更多评论可能会帮助你,所以在你尝试之前一定要阅读这些评论

答案 3 :(得分:15)

您不需要usebackq:

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

答案 4 :(得分:7)

从同一引用页面添加腐蚀的答案是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 :(得分:3)

从命令行

: for / R / D%1 in(*)do rd“%1”

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

我不知道它是否记录在案,但它在W2K,XP和Win 7中有效。我不知道它是否会一直有效,但它不会偶然删除文件。 / p>

答案 6 :(得分:2)

这是上面的混血儿。它会删除超过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"`

答案 7 :(得分:1)

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

  

find / path / to / directory -empty -type d

To find them
  

find / path / to / directory -empty -type d -delete

To delete them

(不是真的使用windows cmd提示,但它很简单,只需几秒钟就可以运行)

答案 8 :(得分: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

答案 9 :(得分:0)

它会很好。这是删除旧文件和递归删除空目录的最佳方法。 以下.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下成功测试。

答案 10 :(得分:0)

如果要在资源管理器上下文菜单中使用Varun的ROBOCOPY命令行(即,单击鼠标右键),这是Windows注册表导入。我尝试将其添加为他的回答的注释,但是内联标记不可行。

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

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

    Windows注册表编辑器5.00版

    [HKEY_CURRENT_USER \ Software \ Classes \ directory \ Background \ shell \ Delete Empty Folders \ command] @ =“ C:\ Windows \ System32 \ Cmd.exe / C \” C:\ Windows \ System32 \ Robocopy.exe \“%V \” \“%V \” / s / move \“ && PAUSE”

    [HKEY_CURRENT_USER \ Software \ Classes \ directory \ shell \ Delete Empty Folders \ command] @ =“ C:\ Windows \ System32 \ Cmd.exe / C \” C:\ Windows \ System32 \ Robocopy.exe \“%V \” \“%V \” / s / move \“ && PAUSE”

  2. 将.txt扩展名重命名为.reg

  3. 双击以导入。

答案 11 :(得分:0)

这可以通过使用带有两个参数的 rd 命令轻松完成:

rd <folder> /Q /S
  • /Q - 安静模式,不询问是否确定删除目录树 /S

  • /S - 删除指定目录中的所有目录和文件 除了目录本身。用于删除目录树。

答案 12 :(得分:-1)

好吧,对于没有空格的简单1级目录结构,[编辑]以及仅包含我发现有用的一类文件的目录(在某些时候来自http://www.pcreview.co.uk/forums/can-check-if-folder-empty-bat-file-t1468868.html),只是一个快速而肮脏的建议:< / p>

for /f %a in ('dir /ad/b') do if not exist %a\*.xml echo %a Empty

/ ad:仅显示目录条目
/ b:使用裸格式(只是名称)

[edit]使用普通星号检查任何文件(%a \ *以上)将无效,谢谢更正

因此,删除将是:

for /f %a in ('dir /ad/b') do if not exist %a\*.xml rmdir %a