使用批处理文件以递归方式在目录中删除特定类型(扩展名)的所有文件

时间:2012-10-30 13:09:05

标签: batch-file cmd

我需要删除dir1和dir2中的所有.jpg和.txt文件(例如)。

我尝试的是:

@echo off
FOR %%p IN (C:\testFolder D:\testFolder) DO FOR %%t IN (*.jpg *.txt) DO del /s %%p\%%t

在某些目录中,它有效;在其他人看来没有。

例如,这没有做任何事情:

@echo off
FOR %%p IN (C:\Users\vexe\Pictures\sample) DO FOR %%t IN (*.jpg) DO del /s %%p\%%t

我在第二个片段中遗漏了什么?它为什么不起作用?

6 个答案:

答案 0 :(得分:160)

您可以使用带有del命令的通配符和/S来递归执行。

del /S *.jpg

附录

@BmyGuest问为什么一个贬低的答案(del /s c:\*.blaawbg)与我的回答有什么不同。

运行del /S *.jpgdel /S C:\*.jpg之间存在巨大差异。第一个命令从当前位置执行,而第二个命令在整个驱动器上执行

在使用第二个命令删除jpg文件的情况下,某些应用程序可能会停止工作,并且您最终会丢失所有家庭照片。这非常烦人,但您的计算机仍然可以运行。

但是,如果您正在处理某个项目,并希望删除dll中的所有myProject\dll文件,请运行以下批处理文件:

@echo off

REM This short script will only remove dlls from my project... or will it?

cd \myProject\dll
del /S /Q C:\*.dll

然后,您最终会从dll驱动器中删除所有C:\个文件。您的所有应用程序都停止工作,您的计算机变得无用,并且在下次重新启动时,您将被传送到第四维,您将永远陷入困境。

这里的教训不是直接在驱动器的根目录(或任何其他可能存在危险的位置,例如%windir%)运行此命令,如果可以避免的话。始终尽可能在本地运行它们。

答案 1 :(得分:3)

我刚才写了一个批处理脚本,允许你选择要删除的文件扩展名。该脚本将查看它所在的文件夹以及具有该扩展名的任何文件的所有子文件夹并将其删除。

@ECHO OFF
CLS

SET found=0
ECHO Enter the file extension you want to delete...
SET /p ext="> "

IF EXIST *.%ext% (           rem Check if there are any in the current folder :)
  DEL *.%ext%
  SET found=1
)
FOR /D /R %%G IN ("*") DO (  rem Iterate through all subfolders
  IF EXIST %%G CD %%G
  IF EXIST *.%ext% (
    DEL *.%ext%
    SET found=1
  )
)

IF %found%==1 (
  ECHO.
  ECHO Deleted all .%ext% files.
  ECHO.
) ELSE (
  ECHO.
  ECHO There were no .%ext% files.
  ECHO Nothing has been deleted.
  ECHO.
)

PAUSE
EXIT

希望这对任何想要它的人都有用:)

答案 2 :(得分:0)

您可以使用它删除文件夹和子文件夹中的所有文件:

DEL "C:\Folder\*.*" /S /Q

或使用此选项仅删除某些文件类型:

DEL "C:\Folder\*.mp4" /S /Q 
DEL "C:\Folder\*.dat" /S /Q 

答案 3 :(得分:0)

我没有足够的声誉来添加评论,因此我将其发布为答案。 但是对于此命令的原始问题:

@echo off
FOR %%p IN (C:\Users\vexe\Pictures\sample) DO FOR %%t IN (*.jpg) DO del /s %%p\%%t

第一个For缺少递归语法,应该是:

@echo off
FOR /R %%p IN (C:\Users\vexe\Pictures\sample) DO FOR %%t IN (*.jpg) DO del /s %%p\%%t

您可以这样做:

FOR %%p IN (C:\Users\0300092544\Downloads\Ces_Sce_600) DO @ECHO %%p

显示实际输出。

答案 4 :(得分:0)

就这样:

@echo off

:: del_ext
call :del_ext "*.txt"
call :del_ext "*.png"
call :del_ext "*.jpg"

:: funcion del_ext
@echo off
pause
goto:eof
:del_ext
 set del_ext=%1
 del /f /q "folder_path\%del_ext%"
goto:eof

pd:用您的文件夹替换folder_path

答案 5 :(得分:-9)

如果您尝试删除C:驱动器中的某些.extensions,请使用此cmd:

del /s c:\*.blaawbg

我有一个客户有加密病毒,我需要找到所有垃圾文件并删除它们。