Як видалити файли з папки за допомогою списку імен файлів у Windows?


23

у мене папка з 2K + файлами в ній, мені потрібно видалити близько 200, у мене є файл txt із усіма іменами файлів, які мені потрібно видалити, упорядковані у списку, як я можу видалити конкретні файли з папки за допомогою списку? (ОС - це Windows 7)

Відповіді:


18

Простий спосіб - скопіювати файл txt у файл, який називається mydel.batв каталозі файлів для видалення. Використовуючи такий редактор, як Microsoft Word, редагуйте цей файл. Зробити глобальну заміну на Newline зазвичай ^pв Word. Замініть його на space/f^pdelspace. Це зміниться

File1.bin
File20.bin
File21.bin

до (з /fдля "примусово видалити файли лише для читання"):

File1.bin /f
del File20.bin /f
del File21.bin /f
del

Відредагуйте рядок кулака, щоб додати delпробіл та видалити останній рядок.

Запустіть пакетну команду.


Крім перемикача / Y, який, мабуть, не працює в команді win7 del, це спрацювало непогано .. дякую
Avishking

2
Це, мабуть, повинно бути /fзамість "примусового видалення файлів лише для читання" /y.
afrazier

Правильний інфраструктур. Я змішував / Y, який працює з XCOPY та однією або двома іншими програмами DOS, щоб "Придушити
запит

У редакторах, які знають, як знайти / замінити регулярними виразами, такими як Notepad ++, вам потрібно буде замінити "^" на "del" і "$" на "/ f", де ^ позначає початок кожного рядка і $ - кінець.
Дан Міреску

38

Введіть це в командному рядку, замінивши свій файл на files_to_delete.txt:

for /f %i in (files_to_delete.txt) do del %i

Версія цього підходить для включення у .cmdфайли (подвійний %%) та здатна мати справу з пробілами у назвах файлів:

for /f "delims=" %%f in (files_to_delete.txt) do del "%%f"

1
Це фактично видалило список файлів замість самих файлів ... мені довелося створити список знову: |
Avishking

4
Мої найглибші вибачення. Я забув /fпрапор.
Вільям Джексон

Це досить чудово, я не знав, що командний рядок підтримує такі петлі. Не хочете написати повідомлення в блозі SU про цю та інші тонкощі командного рядка?
Іво Фліпс

1
@Ivo: Ви можете поглянути на computerhope.com/batch.htm або superuser.com/questions/tagged/batch, щоб дізнатися більше. Як і Unix, багато з того, що можна зробити в скриптах (пакетних файлах), також можна зробити безпосередньо з командного рядка.
BlueRaja - Danny Pflughoeft

Я створив bat-файл і скопіював 2-й приклад: результат: files_to_delete.txt все ще видаляється. (навіть із прапором / f)
bvdb

18

Використання PowerShell:

Get-Content c:\path\to\list.txt | Remove-Item

1
Нічого собі, це читабельніше, ніж пакетне.
TheLQ

Для майбутніх читачів ... Мені довелося змінити трубопровідника на "А", >щоб зробити цю роботу. Тобто Get-Content c:\path\to\list.txt > Remove-Item... У мене були повні шляхи до УНК list.txt. Сподіваюся, це допомагає.
NateJ

@NateJ Я спробував використовувати >файл, і він просто створив файл для мене, а не видаляти речі.
Брайан Дж

@BrianJ Хм, мені доведеться перевірити, що я зробив .. хороший улов.
NateJ

1

Я думаю, це можна зробити за допомогою оболонки.

Знаючи Perl , я схильний використовувати його для подібних речей

perl -l -n -e "unlink" filenames.txt

1

Перший метод працює після деяких змін:

  1. відкрити Блокнот
  2. скопіюйте всі назви файлів із розширенням, які потрібно видалити після додавання delна початку, як

    del File1.bin
    del File20.bin
    del File21.bin
    
  3. збережіть файл, як xyz.batу тій же папці

  4. запустіть файл

2
... текстовий файл у запитанні містить близько 200 назв файлів. Навіщо додавати delвручну, як ви пропонуєте, тоді як рішення вже були розміщені для автоматизації? Як бік: будь-який здоровий редактор матиме певну підтримку пошуку та заміни, включаючи закінчення рядків (або запуски рядків, використовуючи регулярні вирази), макроси або редагування режиму блоків або стовпців (часто ініціюється утримуючи Option або Alt, а потім вибираючи a блок, після якого можна просто набрати відразу кілька рядків).
Ар’ян
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.