Удалить все файлы определенного типа (расширения) рекурсивно вниз по каталогу, используя командный файл
Мне нужно удалить все файлы .jpg и .txt (например) в dir1 и dir2.
То, что я попробовал, было:
@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
Что мне не хватает во втором фрагменте? Почему это не сработало?
Ответы
Ответ 1
Вы можете использовать подстановочные знаки с помощью команды 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%
), если вы можете его избежать. Всегда запускайте их как можно более локально.
Ответ 2
Я написал пакет script некоторое время назад, что позволяет вам выбрать расширение файла для удаления. script будет выглядеть в папке, в которой он находится, и все вложенные папки для любого файла с этим расширением и удалять его.
@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
Надеюсь, это пригодится всем, кто этого захочет:)
Ответ 3
Вы можете использовать это для удаления ВСЕХ файлов внутри папки и подпапок:
DEL "C:\Folder\*.*" /S /Q
Или используйте это для удаления только определенных типов файлов:
DEL "C:\Folder\*.mp4" /S /Q
DEL "C:\Folder\*.dat" /S /Q
Ответ 4
У меня недостаточно репутации, чтобы добавлять комментарии, поэтому я опубликовал это как ответ. Но для оригинальной проблемы с этой командой:
@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
чтобы показать фактический результат.
Ответ 5
Если вы пытаетесь удалить определенные .extensions в диске C: используйте этот cmd:
del /s c:\*.blaawbg
У меня был клиент, который получил вирус шифрования, и мне нужно было найти все ненужные файлы и удалить их.