代码之家  ›  专栏  ›  技术社区  ›  CZFox

删除除两个文件夹外的所有文件夹。bat文件

  •  1
  • CZFox  · 技术社区  · 8 年前

    一批

    @echo off
    set folder="c:\FTP\"
    set keep="keep1"
    set keeptwo="keep2"
    
    cd /d %folder%
    
    for /F "delims=" %%i in ('dir /b') do (
        if /i "%%~ni" NEQ %keep% if /i "%%~ni" NEQ %keeptwo% (rmdir "%%i" /s/q || del "%%i" /s/q)
    )
    
    pause
    

    情况

    • 文件夹1/文件1。txt文件
    • 文件夹2/文件1。txt文件
    • 保留1/文件1。txt文件
    • 保留2/文件1。txt文件
    • 文件1。txt文件

    预期结果

    我需要保留“keep1”和“keep2”文件夹以及所有包含的文件,但必须删除包含所有子目录和文件的“folder1”、“folder2”和“file1.txt”。

    当前结果

    它删除所有文件夹中的所有文件,删除“folder1”和“folder2”,并保留“keep1”和“keep2”

    任何我遗漏的线索。

    2 回复  |  直到 8 年前
        1
  •  2
  •   Squashman Stephan    8 年前

    您不能使用 /S 带有的选项 DELETE 该命令将删除当前目录和所有子目录中的文件。

    不管怎样,这是我完成任务的方式,这样您就不会从 RMDIR 命令我使用 IF EXIST 命令来确定它是文件还是目录。

    @echo off
    set "folder=c:\FTP\"
    set "keep=keep1"
    set "keeptwo=keep2"
    
    cd /d %folder%
    
    for /F "delims=" %%G in ('dir /b') do (
        if /I NOT "%%G"=="%keep%" (
            if /I NOT "%%G"=="%keeptwo%" (
                REM check if it is a directory or file
                IF EXIST "%%G\" (
                    rmdir "%%G" /s /q
                ) else (
                    del "%%G" /q
                )
            )
        )
    )
    
        2
  •  0
  •   Compo    8 年前

    我假设这就是你想要做的:

    @Echo Off
    Set "folder=C:\FTP"
    Set "keep=keep1"
    Set "keeptwo=keep2"
    
    CD /D "%folder%" 2>Nul || Exit /B
    Del /F/A/Q *
    For /D %%A In (*) Do If /I Not "%%A"=="%keep%" If /I Not "%%A"=="%keep2%" RD /S/Q "%%A"
    Pause
    
    推荐文章