删除目录中与某些文件扩展名不匹配的文件

时间:2012-11-07 10:14:14

标签: windows batch-file cmd

我正在尝试编写一个简单的批处理文件,删除目录中的所有文件及其包含匹配某些文件扩展名的子文件夹。

逻辑是这样的:

GOTO directory
delete !(.avi, .mkv, .mp4)

认为这很简单,但我多次尝试过没有运气!

3 个答案:

答案 0 :(得分:1)

@echo off
for /r C:\test %%a in (*) do (
if not %%~xa==.avi (
    if not %%~xa==.mkv (
        if not %%~xa==.mp4 (    
            del /f /q "%%a"
        )
    )
)
)

只需重复if以查找您不想删除的扩展程序。

此答案适用于一些扩展程序,但如果您还有其他任何答案,您会找到更好的答案here

答案 1 :(得分:1)

此问题与Delete *.* excluding some extensions几乎完全相同,但您也想从子目录中删除。前两个答案的以下任何一个改编都应该有效。

以下两种情况都假设您的批处理脚本不在要删除的文件夹层次结构中。

@echo off
for /f %%F in ('dir /s /b /a-d "yourDirPath\*"^| findstr /vile ".avi, .mkv, .mp4"') do del "%%F"

@echo off
setlocal EnableDelayedExpansion
set "exclude=.avi.mkv.mp4."
for /r "yourDirPath" %%F in (*) do if /I "%exclude%" == "!exclude:%%~xF.=!" del "%%F"


如果你的脚本在层次结构中,那么额外的IF语句将解决问题。

@echo off
for /f %%F in ('dir /s /b /a-d "yourDirPath\*"^| findstr /vile ".avi, .mkv, .mp4"') do if "%%~fF" neq "%~f0" del "%%F"

@echo off
setlocal EnableDelayedExpansion
set "exclude=.avi.mkv.mp4."
for /r "yourDirPath" %%F in (*) do if /I "%exclude%" == "!exclude:%%~xF.=!" if "%%~fF" neq "%~f0" del "%%F"

答案 2 :(得分:0)

与此问题类似:How can I delete files that don't match a wildcard?

FOR /R [directory] %%F IN (*.*) DO IF NOT "%%~xF" == ".[extension]" DEL /F /S "%%F"