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.html
Dateien 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
. folder2
Auf 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