【发布时间】:2011-12-11 11:46:06
【问题描述】:
我需要使用 Windows 命令提示符从我的应用程序文件夹中删除所有空文件夹吗?
如何创建这样的 bat 文件?
请帮帮我。
【问题讨论】:
标签: windows command-line command directory
我需要使用 Windows 命令提示符从我的应用程序文件夹中删除所有空文件夹吗?
如何创建这样的 bat 文件?
请帮帮我。
【问题讨论】:
标签: windows command-line command directory
您可以使用ROBOCOPY 命令。它非常简单,也可以用来删除大层次结构中的空文件夹。
ROBOCOPY folder1 folder1 /S /MOVE
这里的源和目标都是folder1,因为您只需要删除空文件夹,而不是将其他(必需)文件移动到不同的文件夹。 /S 选项是跳过复制(在上述情况下移动)空文件夹。由于文件在同一个驱动器内移动,速度也更快。
【讨论】:
更简单的方法是执行 xcopy 以使用 /s 开关制作整个目录结构的副本。 /s 的帮助说复制目录和子目录,除了空目录。
xcopy dirA dirB /S
其中 dirA 是空文件夹的源。 DirB 将是没有空文件夹的副本
【讨论】:
xcopy dirA dirB /SI 将跳过提示“dirB 在目标上指定文件名或目录名吗?”
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
当然,在执行该命令之前,我会先对其进行测试而不删除。此外,这是来自 cmets 的修改版本,其中包含带空格的文件夹:
for /f "usebackq delims=" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"
附:博文中有更多的 cmets 可能会对您有所帮助,因此请务必在尝试之前阅读这些内容
【讨论】:
for /f "tokens=*" %%d in ('dir /ad/b/s ^| sort /R') do rd "%%d"
%%d替换为%d
你不需要 usebackq:
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
鸣谢作者
【讨论】:
这是上述的混合体。它会删除所有早于 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"`
【讨论】:
"dir /ad/b/s | sort /R") do rd "%%d" 的最后一行末尾删除撇号
从命令行: for /R /D %1 in (*) do rd "%1"
在批处理文件中 for /R /D %%1 in (*) do rd "%%1"
我不知道它是否有这样的记录,但它适用于 W2K、XP 和 Win 7。我不知道它是否总是有效,但它不会意外删除文件。
【讨论】:
它会工作得很好。这是删除旧文件和递归删除空目录的最佳方法。 以下 .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 下成功测试。
【讨论】:
安装任何适用于 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 提示符,但它很简单,运行需要几秒钟)
【讨论】:
@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
【讨论】:
如果您想在资源管理器上下文菜单中使用 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\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"
将 .txt 扩展名重命名为 .reg
【讨论】:
for /r "D:\Music" /d %F in (.) do @dir /b "%F" | findstr "^" >nul || rmdir %~fF
D:\Fun 是包含空文件夹的文件夹 文件夹名有空格的情况下双引号(本例不需要)
【讨论】:
好吧,对于没有空格的简单 1 级目录结构、[编辑] 以及仅包含一种我认为有用的文件类型的目录(在某些时候来自 http://www.pcreview.co.uk/forums/can-check-if-folder-empty-bat-file-t1468868.html),这只是一个快速而肮脏的建议:
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
【讨论】:
这可以通过使用带有两个参数的rd 命令轻松完成:
rd <folder> /Q /S
/Q - 安静模式,不询问是否可以删除目录树 /S
/S - 删除指定目录中的所有目录和文件 除了目录本身。用于删除目录树。
【讨论】: