特定のファイルを含むフォルダを削除し、他のファイルを残す

特定のファイルを含むフォルダを削除し、他のファイルを残す

削除したいフォルダーのコレクションがあります。これらのフォルダーにはすべて、 という名前のファイルが含まれています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

関連情報