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

Delete all files of specific type (extension) recursively down a directory using a batch file

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

我尝试的是:

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

在一些目录中,它起作用;在其他目录中,它不起作用。

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

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

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


您可以将通配符与del命令一起使用,并且可以使用/S递归地执行该操作。

del /S *.jpg

补遗

@bmyguest问为什么被否决的答案(del /s c:\*.blaawbg与我的答案不同。

运行del /S *.jpgdel /S C:\*.jpg有很大的区别。第一个命令从当前位置执行,而第二个命令在整个驱动器上执行。

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

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

1
2
3
4
5
6
@echo off

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

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

然后,您将从您的C:\驱动器中删除所有dll文件。你所有的应用程序都停止工作,你的计算机变得无用,在下一次重新启动时,你将被传送到第四维度,在那里你将永远被困住。

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@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

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


可以使用此选项删除文件夹和子文件夹中的所有文件:

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

或仅用于删除某些文件类型:

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

如果您试图删除c:drive中的某些.extensions,请使用以下命令:

1
del /s c:\*.blaawbg

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