Рекурсивно удалите каталог за исключением некоторых файлов в Windows

Если были процессы, подключенные к механизму базы данных, он, вероятно, ожидает на них для разъединения, прежде чем он сможет отсоединить базы данных перед удалением. Просто предположение все же. Это, вероятно, говорит в журналах где-нибудь.

2
задан 10 November 2012 в 09:36
4 ответа

Мне удалось сделать это с помощью некоторого пакетного кода, но он довольно длинный:

setlocal enabledelayedexpansion

:: Delete files not containing "foo"
for /r MyDir %%i in (*) do (
  set temp=%%~nxi
  if "!temp:foo=!"=="!temp!" (
    del "%%i"
  )
)

:: Build recursive list of dirs, sorted by deepest first
set dirs=
for /r MyDir /d %%i in (*) do (
  set dirs="%%i" !dirs!
)

:: Delete dirs.  Nonempty dirs will be skipped.
for %%i in (%dirs%) do (
  rmdir %%i
)
1
ответ дан 3 December 2019 в 11:51

Насколько я знаю, у вас действительно не может быть обоих способов - либо удаление рекурсивно (все идет), либо не рекурсивно (вы явно указываете, что вы хотите удалить).

Единственная причина, по которой трюк только для чтения, который вы пробовали использовать в системах Unix, заключается в том, что сбой / ошибка распространяется вверх по дереву (вы не можете удалить то, что все еще имеет дочерние элементы), и из вашего теста будет видно, что Windows менее внимательна к этому вопросу.

1
ответ дан 3 December 2019 в 11:51
  1. Искать желаемое файлы.
  2. При обнаружении
    • Robocopy с правильными параметрами может сохранять атрибуты и отметки времени.
  3. Удалить каталог.
  4. Копировать дерево файлов / папок обратно в исходное расположение.
  5. ...?
  6. Прибыль!

A лучший скриптер, чем я, вероятно, мог бы автоматизировать все это в пару строк, даже используя robocopy. Я подумал, может, вы скопируете список нужных файлов и воспользуетесь параметром / MIR , чтобы удалить все в исходном каталоге, которого нет в целевом каталоге.

1
ответ дан 3 December 2019 в 11:51

Скрытые файлы не удаляются.

  1. attrib + h для файлов, которые не следует удалять
  2. удалить все файлы
  3. del пустые каталоги
  4. attrib + h файлы сохранено.

Vg:

for /f "delims=" %i in ('dir "My Dir\\*.log" /b /s') do attrib +h "%i"
for /f "delims=" %i in ('dir "My Dir" /b /s') do del "%i" /q
rmdir /s
for /f "delims=" %i in ('dir "My Dir" /b /s /ah') do attrib -h "%i"
-1
ответ дан 3 December 2019 в 11:51

Теги

Похожие вопросы