1

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

逻辑是这样的:

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

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

4

3 回答 3

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只需对您不想删除的扩展名重复's。

这个答案适用于一些扩展,但如果你还有更多,你会在这里找到更好的答案。

于 2012-11-07T10:23:35.667 回答
1

这个问题与Delete *.*几乎相同,但不包括一些扩展名,除了您也想从子目录中删除。前两个答案的以下任何一种改编都应该起作用。

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

@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"
于 2012-11-07T13:13:31.147 回答
0

与此问题类似:如何删除与通配符不匹配的文件?

FOR /R [directory] %%F IN (*.*) DO IF NOT "%%~xF" == ".[extension]" DEL /F /S "%%F"
于 2012-11-07T10:49:08.397 回答