删除仅包含特定文件的空目录和目录(批处理文件)

时间:2012-03-26 09:35:29

标签: batch-file

我需要一个批处理文件,删除所有只包含特定文件(.svn)的空目录和目录。非常感谢您的帮助。

示例:

Folder1                       -- folder conatins subfolders with some files, not remove
     Folder2                  -- empty folder, folder should be deleted
     Folder3                  -- folder contains only .svn, folder should be deleted
           .svn
     Folder4                  -- folder contains subfolder with file, not remove
           Folder41           -- folder contains some file, not remove
                somefile.dat
     Folder5                  -- folder contains some file, not remove 
           .svn
           somefile.dat
     Folder6                  -- folder contains empty subfolders, folder should be deleted
           Folder61           -- folder contains only specific file, folder should be deleted
                .svn

结果:

Folder1
     Folder4    
           Folder41
                somefile.dat
     Folder5
           .svn
           somefile.dat

1 个答案:

答案 0 :(得分:1)

我对这需要的代码很少感到惊讶。最大的诀窍是在SORT /R的输出上使用DIR /B /S /AD,以便在处理文件夹层次结构的父节点之前处理子节点。

我已经快速测试了代码,但请以安全的方式测试自己。

第1版假设".SVN"是完整的文件名。

@echo off
setlocal disableDelayedExpansion
for /f "eol=: delims=" %%A in ('dir /b /s /ad ^| sort /r') do (
  dir /b "%%A" | findstr /livx ".svn" >nul || rd /s /q "%%A"
)

如果您的意思是"*.SVN",第二个版本只会稍加修改。只更改了一个FINDSTR选项。

@echo off
setlocal disableDelayedExpansion
for /f "eol=: delims=" %%A in ('dir /b /s /ad ^| sort /r') do (
  dir /b "%%A" | findstr /live ".svn" >nul || rd /s /q "%%A"
)

更新:2012-11-06

我刚刚意识到,如果非空文件夹名为.SVN,则可以取消上述解决方案。代码应删除空文件夹或仅包含名为.SVN的文件。如果文件夹包含名为.SVN的非空文件夹,则不应删除该文件夹。

以下是第一个解决方案的修复:

@echo off
setlocal disableDelayedExpansion
for /f "eol=: delims=" %%A in ('dir /b /s /ad ^| sort /r') do (
  dir /b "%%A"|findstr /livx ".svn" >nul||>nul 2>&1 dir /b /ad .svn||rd /s /q "%%A"
)

这是第二个解决方案的修复

@echo off
setlocal disableDelayedExpansion
for /f "eol=: delims=" %%A in ('dir /b /s /ad ^| sort /r') do (
  dir /b "%%A"|findstr /live ".svn" >nul||>nul 2>&1 dir /b /ad *.svn||rd /s /q "%%A"
)