Видалення всіх файлів, які не відповідають певній схемі - командний рядок Windows


12

Видалити елементи за допомогою командного рядка досить просто.

del /options filename.extension

Тепер, припустимо, я хочу видалити всі файли, які не закінчуються .jpg у папці, як би це зробити.

Справа в тому, що у мене є програмне забезпечення, яке перетворює всі задані зображення в .jpg, але воно залишає оригінали, які мені більше не потрібні.

Було б набагато ефективніше виконати одне твердження, порівняно з тим, щоб робити кілька заяв для кожного різного типу файлів.

Відповіді:


14

Я б це зробив так:

attrib +r *.jpg
del /q *
attrib -r *.jpg

Це спочатку зробить усі файли JPG лише для читання, видалить усе інше (це автоматично пропустить файли, доступні лише для читання), а потім зробить файли JPG знову зручними для запису.


Працював як чемпіон. Примітка: просто додайте /sдо кожного рядка, щоб рекурсивно включати файли у підкаталоги.
Чак Вільбур

9

Це насправді досить просто.

Вам потрібно forбуде повторити файли, а потім просто шукати розширення:

for %f in (*) do if not %~xf==.jpg del "%f"

слід зробити трюк (код тут ).


дякую, але одне лише залежить від того, яку карту я використовую.
KdgDev

4
Карта?
Джой

Як сказати, якщо ні .jpg, а не .jsp, а не .xml, то del?
користувач1164061

1

Потужність на допомогу
У часи Windows 7/8 це спадкоємець старого хорошого командного рядка

Del C:\myFolder\* -exclude '*.jpg'

Delпсевдонім для Remove-Item. У нього є кілька варіантів, таких як повтор, включають, виключають і фільтрують (використовуйте це для RegEx)

Ви повинні додати, \*щоб включити файли в задану папку


З підказки CMD це має спрацювати:PowerShell.exe -Command "&{Remove-Item C:\MyFolder\* -Exclude '*.jpg'}"
Іззі

Примітка: PowerShell поставляється з Win 7/8. Для Windows XP або Vista вам потрібно завантажити та встановити.
Ізі

1

Я знаю, що він не відповідає безпосередньо на ваше запитання, але ви подивилися на варіанти конвертера, щоб побачити, чи:

  1. Він може видалити оригінали

або

  1. Записати .jpg у нову папку?

У мене немає прямого варіанту для цього. Що буде робити, це перезаписати оригінал, якщо це був JPG для початку. Але всі інші залишаються на диску, поки створюється JPG з них.
KdgDev

@WebDevHobo - ну добре, я б тоді пішов із пропозицією Йоганнеса.
ChrisF

0

Я шукав спосіб знайти всі файли, у яких НЕ було розширення ".mp3" у каталозі TREE в Windows 7 (об'єм NTFS), що містить, можливо, 20 000 файлів у декількох сотнях каталогів різної глибини ... так що після трохи я використовував:

cd <theplace>
dir /S | find /V "<DIR>" | find /V "Total" | find /V "bytes" | find /V "Directory" | find /V "Volume" | find /V ".mp3" | more /S

тут перераховані файли, які не відповідають .mp3 після зняття всього, що стосується виводу команди DIR ... 99% працює ..., якщо файл, який не відповідає, не буде названий одним із ключових слів у стандартному виведенні DIR - можливо, є спосіб зробити звіт про ДІР менше інформації щодо заголовка / підсумків - але я не турбувався, тому що це отримало більшу частину шляху.


Мабуть, код розміщення тут знімає деякі спеціальні символи ... тож команда "cd" вище знаходилась у рядку і вказувала цільову кореневу директорію, а перша команда "find" видаляла будь-які рядки, що містили "<" DIR "> "(перейдіть до цифри), оскільки це вихід команди dir - але поштовий індекс тут може подумати, що це якась
метаінструкція

1
Є набагато простіший спосіб зробити це: /bпрапор dirкоманди. dir /bперелічить імена файлів і розширення лише в поточному каталозі, dir /s /bперелічить повністю кваліфіковані імена всіх файлів у поточному та всіх підкаталогах. Передача find /vзамість forциклу - це приємний штрих, який я мушу пам’ятати, але я не думаю, що це працює del.
Боб

0

Інший спосіб видалення всіх файлів, що відповідають імені файлу, показаний нижче. Всі файли списку циклу for і всі файли if НЕ збігаються з назвою файлу (без імені каталогу).

for /r %f in (*) do if not %~nxf == abc.xml del "%f"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.