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

How to delete empty folders using windows command prompt?

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

如何创建这样的bat文件?

请帮助我。


您可以使用ROBOCOPY命令。这非常简单,还可以用于删除较大层次结构中的空文件夹。

1
ROBOCOPY folder1 folder1 /S /MOVE

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


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

1
xcopy dirA dirB /S

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


1
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

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

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

P.S。博客文章中有更多评论可能会对您有所帮助,因此请务必在尝试之前先阅读这些内容


您不需要usebackq:

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


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

贷记给投稿作者


从命令行


对于(*)中的/ R / D%1,请执行rd "%1 "

在批处理文件中
对于(R)中的/ R / D %% 1,请执行" %% 1 "

我不知道它是否有这样的文档,但是它可以在W2K,XP和Win 7中运行。我不知道它是否始终可以运行,但是永远不会意外删除文件。


这是上面的杂句。它会删除所有X天之前的文件,并删除给定路径的所有空文件夹。要使用,只需设置日期,文件夹路径和驱动器

1
2
3
4
5
6
7
8
9
10
11
12
13
@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"`


它将正常工作。这是删除旧文件并递归删除空目录的最佳方法。
以下.bat文件是

1
2
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"

占位符需要按以下方式替换(不带引号):

1
2
3
[DAYS] = Max. age of the files in days, e.g. a€?10a€?
[PATH] = Path to search for old files and empty folders, e.g. a€?C:\\Backup\\a€?
[FILE-PATTERN] = Pattern that matches files to delete, e.g. a€?*.bkpa€?

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


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

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

1
To find them

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

1
To delete them

(不是真的使用Windows cmd提示符,但是很容易,并且花了几秒钟来运行)


n


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

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

  • 复制到新的文本文件中:

    Windows注册表编辑器版本5.00

    [HKEY_CURRENT_USER \\\\\\\\ Software \\\\\\\\\\ Classes \\\\\\\\ directory \\\\\\\\\\ Background \\\\\\\\\\ shell \\\\\\\\\\ Delete Empty Folders \\\\\\\\\\ command]
    @ = " C:\\\\\\\\ Windows \\\\\\\\\\ System32 \\\\\\\\\\ Cmd.exe / C \\\\" C:\\\\\\\\ Windows \\\\\\\\ System32 \\\\
    obocopy.exe \\\\"%V \\\\" \\\\"%V \\\\" / s / move \\\\"


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    @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

    好吧,对于没有空格的简单1级目录结构,[edit]以及仅包含一种我认为有用的文件的目录(只是从http://www.pcreview.com提出的建议),这只是一个快速而肮脏的建议。 co.uk/forums/can-check-if-folder-empty-bat-file-t1468868.html):

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

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

    [edit]使用纯星号检查任何文件(上面的%a \\\\\\\\ *)将不起作用,感谢您的纠正

    因此,删除将是:

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