Удалить папки, содержащие определенные файлы, и оставить другие

Удалить папки, содержащие определенные файлы, и оставить другие

У меня есть коллекция папок, которые я хочу удалить. Все эти папки содержат файл с именем index.html.

Например, эту папку следует удалить, поскольку она содержит файл index.html:c:\folder2\folder3\index.html

Но в той же корневой папке есть папки, содержащие разрешенные файлы, такие как:c:\folder2\folder1\software.rar

Поэтому мне нужно решение, чтобы найти все index.htmlфайлы и сохранить родительскую папку как переменную, а затем удалить ее.

Я протестировал это, и получился хороший список, но удаление не работает:

dir /ad /b /s %1 >list.txt for /f %%g in (list.txt) do if exist %%g\index.html rd /s /q %%g

решение1

Windows 10 64-бит. PowerShell 5.1

Удалить только те каталоги, которые содержатindex.html Для тестирования очистите ваш рабочий стол. На вашем рабочем столе не должно быть каталога с именем . На вашем рабочем столе создается folder2каталог с именем .folder2

pushd $HOME\Desktop;ni -itemtype directory "folder2\folder3", "folder2\folder1">$null;ni -itemtype file "folder2\folder3\index.html", "folder2\folder1\software.rar">$null;explorer .\folder2;cls 
Read-Host "    
Test files have been created on your desktop. See explorer.
Press enter key to continue"    
Get-ChildItem .\folder2\*\index.html | ForEach-Object { 
  remove-item $_.directoryname -recurse
} 
explorer .\folder2;cls 
Read-Host "    
Directories containing index.html have been deleted. See explorer.
Press enter key to delete all test files"
ri (".\folder2") -recurse
popd 
# 

решение2

PowerShell:

Подробный:

$root = 'c:\TopLevel'
Get-ChildItem -path $root -filter index.html -File -Recurse | Select -expand Directory | Remove-Item -Recurse

укороченная версия:

$root = 'c:\TopLevel'
gci $root index.html -Recurse | select -expand directory | ri -Recurse

Связанный контент