Як створити пакетний файл, який видаляє всі папки з назвою `bin` або` obj` рекурсивно?


31

У мене є необхідність видалити всі bin& objпапки в папці на моєму ПК. Отже, я думаю про те, щоб зробити це пакетним файлом, але я не знайомий із командним файлом у Windows. Будь ласка, допоможіть.

[Редагувати]

Після обговорення з користувачем DMA57361я перейшов до поточного рішення (все ще виникають проблеми, дивіться наші коментарі):

Створіть .bat файл і вставте команду нижче:

start for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"

АБО

start for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s "%%d"

@ DMA57361: Коли я запускаю ваш сценарій, я отримую помилку нижче. Будь-яка ідея?

alt текст


@Nam - чому ти працюєш for \/d \/r ...- чому замість подвійних косих косих for /d /r ...? І запуск "повної" версії з /qв кінці - як я заявляю - видаляє все без попередження, тому не повертає жодного результату (тобто, він не повідомляє вам, коли він працює, лише коли має помилку), ви впевнені, що друга Біг вище не працював правильно?
DMA57361

@Nam цей запуск теж не той самий - у зображенні, з якого починається ваша команда, for / %d in а ні for /d /r . %d in- ви повинні використовувати всю команду нижче, кожен біт має іншу функцію і важливий.
DMA57361

@ Nam Opps, вибачте, ви абсолютно праві, він не друкує перші кілька перемикачів! Однак ця помилка не кидає і, здається, працює для мене правильно. Ви намагалися просто запустити команду з командного рядка, а не намагатися запустити її з пакетного файлу?
DMA57361

Хм, як дивно. Можливо, ваш Win7 робить щось інше з партією порівняно з моїм WinXP тоді, не впевнений, що. Я зможу перевірити Win7 вдома сьогодні ввечері, інакше боюся, що я застряг на даний момент ...
DMA57361

Насправді спробуйте встановити команду batch startта побачити, що відбувається. Не ідеально, але мені цікаво, чи це може допомогти.
DMA57361

Відповіді:


42

На це раніше я відповідав на "Переповнення стека", саме звідки я взяв основну увагу цієї відповіді.

Спробуйте виконати таку команду, яку можна виконати зсередини cmd:

for /d /r . %d in (bin,obj) do @if exist "%d" rd /s/q "%d"

Якщо вам потрібні інші папки, які потрібно змінити, просто додайте нові елементи до (bin,obj)набору в середині команди.

Це видалить усе відповідне без попередження та без використання кошика, тому, якщо ви хочете трохи додаткової безпеки, відмовтеся /qвід виклику rdв кінці, і система повинна запитувати вас перед кожним видаленням.

for /d /r . %d in (bin,obj) do @if exist "%d" rd /s "%d"

Якщо ви плануєте запустити команду з пакетного файлу , вам потрібно буде замінити кожен екземпляр змінної %dна %%d, наприклад:

for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"
OR
for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s "%%d"

Відповідно до конверсії, яка була у коментарях до питання

Якщо команда відмовляється запускати пакетний файл (тут не вдається повторити), спробуйте встановити команду start. Хоча це запустить процес одночасного запуску з пакетним файлом, що може спричинити інші проблеми, але, швидше за все, буде працювати правильно.

Крім того, якщо у вас є файли з іменем objабо binв дереві папок, над яким працює команда, ви отримаєте повідомлення про помилку для кожного зіткнутого файлу, який має відповідне ім'я. Ці зібрані файли не видаляються і не повинні перешкоджати видаленню команди, що вона повинна. Іншими словами, їх можна безпечно ігнорувати.


1
Ви, можливо, знаєте, як я можу ігнорувати одну папку в цій кореневій папці, де я виконую цю команду?
Горан Обрадович

Працювали чудово! Дякую! +1
khr055

1

Ці команди повинні працювати на cmd.

дель * .obj

дель * .бін


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.