使用.bat文件删除除两个文件夹以外的所有文件

时间:2018-04-25 10:30:45

标签: batch-file

批量

@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

场合

  • 的folder1 / FILE1.TXT
  • 文件夹2 / FILE1.TXT
  • keep1 / FILE1.TXT
  • keep2 / FILE1.TXT
  • FILE1.TXT

预期结果

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

当前结果

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

任何线索我都缺少。

2 个答案:

答案 0 :(得分:1)

您不能将/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
            )
        )
    )
)

答案 1 :(得分:0)

我假设这是你想要做的:

@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