Exclua pastas que contêm determinados arquivos e mantenha outros

Exclua pastas que contêm determinados arquivos e mantenha outros

Eu tenho uma coleção de pastas que desejo excluir. Todas essas pastas contêm um arquivo chamado index.html.

Por exemplo, esta pasta deve ser removida porque contém um arquivo index.html:c:\folder2\folder3\index.html

Mas na mesma pasta raiz existem pastas que contêm arquivos permitidos como:c:\folder2\folder1\software.rar

Então preciso de uma solução para encontrar todos index.htmlos arquivos e manter a pasta pai como uma variável e excluí-la depois.

Eu testei com isso e dá uma boa lista, mas a exclusão não está funcionando:

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

Responder1

Janela 10 de 64 bits. PowerShell 5.1

Exclua apenas diretórios que contenhamindex.html Para testar, limpe sua área de trabalho. Não deve haver nenhum diretório nomeado folder2em sua área de trabalho. Um diretório nomeado folder2é criado em sua área de trabalho.

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 
# 

Responder2

PowerShell:

Verboso:

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

versão curta:

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

informação relacionada