Як створити пакетний файл, який видаляє всі папки з назвою `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.