Пакетный файл для удаления папок, в которых нет определенного слова

#batch-file

#пакетный файл

Вопрос:

У меня есть папка с фильмами, которая содержит следующую структуру:

 C:MoviesMovie Title 1
C:MoviesMovie Title 2
C:MoviesMovie Title 3 xyz
C:MoviesMovie Title 4 xyz
C:MoviesMovie Title 5
C:MoviesMovie Title 6 xyz
C:MoviesMovie Title 7.avi
C:MoviesMovie Title 8.mp4
  

Что я ищу, так это пакетный файл, который я могу запустить через планировщик задач, чтобы удалить все папки (и их содержимое), в которых нет слова xyz , а также другие типы файлов в папке Movies, например:

 C:MoviesMovie Title 7.avi
C:MoviesMovie Title 8.mp4
  

Таким образом, в результате выполнения пакетного файла у меня было бы только:

 C:MoviesMovie Title 3 xyz
C:MoviesMovie Title 4 xyz
C:MoviesMovie Title 6 xyz
  

Что у меня пока есть, так это этот код:

 set folder="C:Movies"
cd /d %folder%
for /F "delims=" %%i in ('dir /b') do (rmdir *.* /q || del *.* /q)
  

Но это удаление только файлов в папке movies, не удаляет папки, в которых нет определенного слова, как я упоминал выше.

Комментарии:

1. Что вы уже пробовали?

2. есть несколько способов, но вам нужно хотя бы показать, что вы пробовали, прежде чем я действительно смогу опубликовать для вас ответ.

Ответ №1:

Вы можете использовать много методов .. во-первых, вы могли бы использовать findstr и запускать оба del и rmdir для файлов, не проверяя, что это такое, а просто перенаправляя на nul .

 @echo off
for /f "delims=" %%i in ('dir /b C:Movies ^| findstr /vi "xyz"') do (
  del /Q "%%i">nul
  rmdir /Q/S "%%i">nul
)
  

Не стесняйтесь ознакомиться с приведенными выше командами из cmd.exe

  • findstr /?
  • for /?
  • if /?

Комментарии:

1. Если это сработало, вы должны бросить кость Герхарду, приняв это как принятый ответ 😉