101

我需要删除 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

我在第二个片段中缺少什么?为什么它不起作用?

4

6 回答 6

247

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

附录 2

通配符方法将尝试匹配所有文件名,它们的 8.3 格式和它们的“长名称”格式。例如,*.dll将匹配project.dll and project.dllold,这可能会令人惊讶。有关更多详细信息,请参阅SU 上的此答案。

于 2012-10-30T13:12:34.023 回答
7

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

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

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

DEL "C:\Folder\*.mp4" /S /Q 
DEL "C:\Folder\*.dat" /S /Q 
于 2019-05-02T12:40:19.693 回答
5

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

@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

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

于 2015-08-02T16:11:57.790 回答
1

我没有足够的声誉来添加评论,所以我发布了这个作为答案。但是对于这个命令的原始问题:

@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

显示实际输出。

于 2019-07-01T08:03:34.013 回答
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:将文件夹路径替换为您的文件夹

于 2020-05-16T00:27:06.550 回答
-11

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

del /s c:\*.blaawbg

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

于 2015-04-23T01:53:56.337 回答