下面的脚本从根目录中删除所有子目录,并删除根目录中除*.bat文件以外的所有文件。
pause
FOR /R C:\Temp\ %%F IN (*.*) DO IF NOT "%%~xF" == ".bat" DEL /F /S "%%F"
for /d %%i in ("c:\Temp\*") do rmdir /s /q "%%i"
pause帮助我改进脚本,它还可以扫描根子目录中的文件*.bat,并删除所有具有其他扩展名的文件。
发布于 2013-12-09 16:54:23
测试。如果它在控制台中显示的是需要完成的操作,则从保留rmdir或del命令的破坏性行中删除该del命令。
@echo off
    setlocal enableextensions
    set "root=c:\temp"
    rem For the %root% tree
    for /r "%root%" %%d in (.) do (
        rem Test for the presence of .bat files under directory 
        dir /s /b "%%~fd\*.bat" 2>nul | find /v "" > nul 
        if errorlevel 1 (
            rem If there is no .bat files under directory, remove directory
            echo(**** rmdir /s /q "%%~fd"
        ) else (
            rem There are bat files in directory or under it. Remove anything else in this directory
            for %%f in ("%%~fd\*") do if not "%%~xf"==".bat" echo(-------- del "%%~ff"
        )
    )编辑-以适应注释-如何调整代码,以便它将处理多个根文件夹?将代码转换为子例程,然后使用相应的根调用它。遍历根目录列表
@echo off
    setlocal enableextensions
    for %%r in ("c:\temp" "c:\temp2" "c:\temp3") do call :processRoot %%r
    endlocal
    exit /b
:processRoot
    setlocal enableextensions disabledelayedexpansion
    set "root=%~1"
    rem For the %root% tree
    for /r "%root%" %%d in (.) do (
        rem Test for the presence of .bat files under directory 
        dir /a /s /b "%%~fd\*.bat" 2>nul | find /v "" > nul 
        if errorlevel 1 (
            rem If there is no .bat files under directory, remove directory
            echo(**** rmdir /s /q "%%~fd"
        ) else (
            rem There are bat files in directory or under it. Remove anything else in this directory
            for %%f in ("%%~fd\*") do if not "%%~xf"==".bat" echo(-------- del "%%~ff"
        )
    )
    endlocal
    goto :eofhttps://stackoverflow.com/questions/20468569
复制相似问题