Löschen Sie Ordner mit bestimmten Dateien und behalten Sie andere

Löschen Sie Ordner mit bestimmten Dateien und behalten Sie andere

Ich habe eine Sammlung von Ordnern, die ich löschen möchte. Alle diese Ordner enthalten eine Datei mit dem Namen index.html.

Beispielsweise sollte dieser Ordner entfernt werden, da er eine Datei enthält index.html:c:\folder2\folder3\index.html

Aber unter demselben Stammordner gibt es Ordner, die zulässige Dateien enthalten, wie:c:\folder2\folder1\software.rar

Ich brauche also eine Lösung, um alle index.htmlDateien zu finden, den übergeordneten Ordner als Variable beizubehalten und ihn anschließend zu löschen.

Ich habe es damit getestet und es erstellt eine schöne Liste, aber das Löschen funktioniert nicht:

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

Antwort1

Windows 10 64-Bit. PowerShell 5.1

Löschen Sie nur Verzeichnisse, die enthaltenindex.html Leeren Sie zum Testen Ihren Desktop. Auf Ihrem Desktop sollte sich kein Verzeichnis mit dem Namen befinden folder2. folder2Auf Ihrem Desktop wird ein Verzeichnis mit dem Namen erstellt.

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 
# 

Antwort2

Power Shell:

Ausführlich:

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

Kurzfassung:

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

verwandte Informationen