批处理删除文件夹+子文件夹中除文件类型以外的所有文件

问题描述:

我有一个包含数千个子文件夹的文件夹。 有许多文件,如.cfg或.txt,都是不必要的。批处理删除文件夹+子文件夹中除文件类型以外的所有文件

我只需要包含.png和.jpg文件的文件夹。 所以程序应该是:

  • 找到所有的文件,除了png格式和.jpg文件并删除它们
  • 检查所有的空文件夹并将其删除

我发现下面的代码:

How can I delete all files/subdirs except for some files in DOS?

如果我想添加.png和.jpg,我需要添加什么?

attrib +r +s *.png 
attrib +r +s *.jpg 
del *.* 
attrib -r -s *.bat 
attrib -r -s *.jpg 

似乎不起作用。另外我需要文件夹卸妆。

自己最终做出了解决方案。

REM Use at your own risk, it does a mass DELETE of everything! 

SET ExcludeFiles=(png jpg)  
SET MapDrive=%cd:~0,1% 
SET Directory=%~dp0 

%MapDrive%: 
cd %Directory% 

attrib +a *.* /s 
echo %date% 
for %%i in %ExcludeFiles% do attrib -a *.%%i /s 
echo %date% 
del %Directory%\*.* /s /a:a /q 

echo %date% 
attrib +a %Directory%\*.* /s 
echo %date% 

for /f "usebackq" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d" 
pause 

@echo off 

set the_dir=c:\dir_with_images 
pushd "%the_dir%" 

:: delete files that are not pictures 
for /f "tokens=* delims=" %%# in ('dir /b /s /a:-d|findstr /i /v ".jpg .png"') do (
rem -- remove "ECHO" bellow if everything is OK 
ECHO del /q /f "%%~f#" 
) 

:: delete empty folders 
for /f "tokens=* delims=" %%# in ('dir /b /s /a:d|findstr /i /v ".jpg .png"') do (
    :: recursively deletes empty folders .Without /S switch RD should not delete non-empty folders 
    RD "%%~f#" >nul 2>nul 
) 

未测试.YOu应该在开始时设置路径。删除文件不是“激活” - 只是回声。您应该删除注释中提到的ECHO

+0

不幸的是,它不起作用,它既不会回应任何东西,也不会在删除echo-comment之后删除任何内容。 – AtroCty