Подтвердить что ты не робот

Удалить все файлы определенного типа (расширения) рекурсивно вниз по каталогу, используя командный файл

Мне нужно удалить все файлы .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

Что мне не хватает во втором фрагменте? Почему это не сработало?

4b9b3361

Ответ 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

У меня был клиент, который получил вирус шифрования, и мне нужно было найти все ненужные файлы и удалить их.