删除包含某些文件的文件夹并保留其他文件

删除包含某些文件的文件夹并保留其他文件

我有一组想要删除的文件夹。所有这些文件夹都包含一个名为 的文件index.html

例如,应该删除此文件夹,因为它包含一个文件index.htmlc:\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

电源外壳:

详细:

$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

相关内容