Eliminar carpetas que contengan ciertos archivos y conservar otros

Eliminar carpetas que contengan ciertos archivos y conservar otros

Tengo una colección de carpetas que quiero eliminar. Todas estas carpetas contienen un archivo llamado index.html.

Por ejemplo, esta carpeta debería eliminarse porque contiene un archivo index.html:c:\folder2\folder3\index.html

Pero bajo la misma carpeta raíz hay carpetas que contienen archivos permitidos como:c:\folder2\folder1\software.rar

Entonces necesito una solución para encontrar todos index.htmllos archivos y mantener la carpeta principal como una variable y eliminarla luego.

Probé con esto y hace una buena lista, pero la eliminación no funciona:

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

Respuesta1

Ventana 10 de 64 bits. PowerShell 5.1

Eliminar sólo directorios que contenganindex.html Para realizar pruebas, limpie su escritorio. No debería haber ningún directorio con nombre folder2en su escritorio. folder2Se crea un directorio llamado en su escritorio.

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 
# 

Respuesta2

Potencia Shell:

Verboso:

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

version corta:

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

información relacionada