2012-11-07 109 views
1

我正在嘗試編寫一個簡單的批處理文件,用於刪除目錄中的所有文件及其包含的子文件夾,其中不是與某些文件擴展名匹配。刪除與某些文件擴展名不匹配的目錄中的文件

邏輯是這樣的:

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

以爲這是很簡單,但我已經沒有運氣試過多次!

+1

嘗試http://superuser.com/ –

+0

如果你想避免循環,如果等等,移動所需的文件到另一個目錄。刪除剩餘的文件,然後移回'必需的'文件。 它看起來比循環+嵌套if更具擴展性。 – anishsane

+0

[刪除\ *。\ * *不包括一些擴展名]的可能重複(http://stackoverflow.com/questions/9424380/delete-excluding-some-extensions) – finnw

回答

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

這個問題幾乎是相同的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" 
相關問題