此类主题的一个常见问题是,如果目标文件夹存在多个级别的实例,大多数方法都会导致错误,因为当删除高级文件夹时,它下面的所有文件夹都会消失。例如:
C:\X\Y\subfolder
C:\X\Y\subfolder\one\Y
C:\X\Y\subfolder\two\Y
C:\X\Y\subfolder\three\Y
C:\X\test
C:\X\test\test
上一个示例生成了一个包含 4 个名为 Y 的文件夹的列表,这些文件夹将被删除,但在第一个文件夹被删除后,其余三个名称不再存在,在尝试删除它们时会导致错误消息。我了解在您的情况下这是一种可能性。
为了解决这个问题,文件夹必须按自下而上的顺序删除,即最里面的文件夹必须先删除,最顶层的文件夹必须最后删除。实现这一点的方法是通过递归子程序:
@echo off
rem Enter into top level folder, process it and go back to original folder
pushd x
call :processFolder
popd
goto :EOF
:processFolder
rem For each folder in this level
for /D %%a in (*) do (
rem Enter into it, process it and go back to original
cd %%a
call :processFolder
cd ..
rem If is the target folder, delete it
if /I "%%a" == "y" (
rd /S /Q "%%a"
)
)
exit /B
尽管在这种特殊情况下,由其他方法引起的问题只是多个错误消息,但在其他情况下,这种处理顺序是基本的。