批量脚本自动删除空文件夹 - 需要帮助添加例外

时间:2014-12-04 10:33:18

标签: windows batch-file

我的批处理经验相当有限,但我确实编写了以下脚本来删除目标文件夹的所有空子文件夹。

set "Target=C:\Target" 
for /f "delims=" %%i in ('dir "%Target%" /A:D /B /S ^| sort /r') do rd "%%i" 2>NUL >NUL

我的问题是:
1.我希望能够保持第一层子文件夹完整,只删除以下图层中的空文件夹。
2.如果可能,我还想完全根据他们的名字跳过某些文件夹。

是否可以这样做或者我是否需要为我要清理的所有子文件夹编写脚本?

1 个答案:

答案 0 :(得分:1)

以下代码在 C:\ Target

文件夹中的以下文件夹结构上进行了测试
  • Folder1中
    • 要删除的文件夹
    • 保留文件夹
    • FolderToKeepB
  • 文件夹2
    • 保留文件夹
    • 非空文件夹
      • Folder.txt中的文件

运行下面的批处理文件后生成的文件夹结构是

  • Folder1中
    • 保留文件夹
    • FolderToKeepB
  • 文件夹2
    • 保留文件夹
    • 非空文件夹
      • Folder.txt中的文件

只删除了单个文件夹要删除的文件夹,因为这个文件夹不应该始终保留,而且确实是空的。

@echo off
rem For each subfolder in C:\Target do ...
for /D %%D in ("C:\Target\*") do (
    rem For each subfolder in found subfolder of C:\Target do ...
    for /D %%S in ("%%~D\*") do call :DeleteFolder "%%~S"
)
rem This goto :EOF results in exiting the batch file.
goto :EOF

rem Subroutine for easier comparing the name of the current
rem subfolder with the name of the subfolders to always keep.
rem The goto :EOF commands below just exit the subroutine.
:DeleteFolder
if "%~nx1"=="Folder To Keep A" goto :EOF
if "%~nx1"=="FolderToKeepB" goto :EOF

rem Delete this subfolder which fails if it is not empty.
rem The error message is suppressed by redirecting output stream
rem stderr (standard error) with handle 2 to the NUL device.
rd "%~1" 2>nul
goto :EOF

有关使用过的命令的更多详细信息,请在运行

时将帮助输出打印到控制台窗口中