![特定のファイルを含むフォルダを削除し、他のファイルを残す](https://rvso.com/image/1618362/%E7%89%B9%E5%AE%9A%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%90%AB%E3%82%80%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%82%92%E5%89%8A%E9%99%A4%E3%81%97%E3%80%81%E4%BB%96%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%AE%8B%E3%81%99.png)
削除したいフォルダーのコレクションがあります。これらのフォルダーにはすべて、 という名前のファイルが含まれていますindex.html
。
たとえば、このフォルダーにはファイルが含まれているため、削除する必要がありますindex.html
。c:\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