![Удалить папки, содержащие определенные файлы, и оставить другие](https://rvso.com/image/1618362/%D0%A3%D0%B4%D0%B0%D0%BB%D0%B8%D1%82%D1%8C%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B8%2C%20%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D1%89%D0%B8%D0%B5%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5%20%D1%84%D0%B0%D0%B9%D0%BB%D1%8B%2C%20%D0%B8%20%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D0%B5.png)
У меня есть коллекция папок, которые я хочу удалить. Все эти папки содержат файл с именем 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