3

Фон

Удалите набор файлов, разбросанных по разным каталогам.

проблема

Следующий код не работает (unescaped | вызывает проблемы);

for %i in (dir /s/b | find "lock") do echo del %i

Вопрос

Не записывая пакетный файл, как бы вы удалили все файлы с именем "lock" (т. Е. Найденные с помощью команды find ) в текущем каталоге и во всех подкаталогах (включая скрытые каталоги)?

Спасибо!

4 ответа4

4

Ваш код нуждается в нескольких исправлениях. Оператор канала должен быть экранирован символом пакетного перехода ^ и при использовании кавычек в скобках для команды должна быть указана опция usebackq .

for /?

Пакетный формат:

for /f "usebackq" %%i in (`dir /s /b ^| find "lock"`) do echo %%i

Формат командной строки:

for /f "usebackq" %i in (`dir /s /b ^| find "lock"`) do echo %i

Замените echo на del и любой из его параметров, когда вы хотите, чтобы он действительно удалил файлы. Обратите внимание, что двойные знаки процента необходимы при использовании в файле bat, одиночные при использовании непосредственно в командной строке.

Другой способ - использовать команду forfiles . forfiles /?

forfiles /m *lock* /s /c "cmd /c echo @file"

Обратите внимание, что оба эти метода также удаляют любые папки, содержащие lock поискового запроса. Для предотвращения этого потребуются дополнительные шаги.

2

Для данного диска и / или пути (также смотрите в подпапках):

del /f /s /q c:\windows\lock
1

Другой вариант - использовать команду del следующим образом:

del /s c:\directory\*_gdiplus*.*

где "_gdiplus", например, это имя файла, которое содержит строку, которую вы хотите удалить.

1

Ответ Дэвида-Румана не работает с путями, содержащими пробелы! Ты можешь использовать:

for /f "usebackq delims=" %i in (`dir /s /b ^| find "lock"`) do del "%i" 

Если у вас есть hinned файлы, вы можете использовать:

for /f "usebackq delims=" %i in (`dir /s /b /a ^| find "lock"`) do del "%i" /A:H

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .