我需要删除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
我在第二个片段中遗漏了什么?它为什么不起作用?
答案 0 :(得分:160)
您可以使用带有del
命令的通配符和/S
来递归执行。
del /S *.jpg
@BmyGuest问为什么一个贬低的答案(del /s c:\*.blaawbg
)与我的回答有什么不同。
运行del /S *.jpg
和del /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
我有一个客户有加密病毒,我需要找到所有垃圾文件并删除它们。