次のようなテキスト ファイルにファイル名のリストがあります。
f1.txt
f2
f3.jpg
Powershell でこれらのファイル以外のすべてをフォルダーから削除するにはどうすればよいですか?
擬似コード:
- テキスト ファイルを 1 行ずつ読み取る
- ファイル名のリストを作成する
- Recurse フォルダーとそのサブフォルダー
- ファイル名がリストにない場合は削除します。
次のようなテキスト ファイルにファイル名のリストがあります。
f1.txt
f2
f3.jpg
Powershell でこれらのファイル以外のすべてをフォルダーから削除するにはどうすればよいですか?
擬似コード:
データ:
-- begin exclusions.txt --
a.txt
b.txt
c.txt
-- end --
コード:
# read all exclusions into a string array
$exclusions = Get-Content .\exclusions.txt
dir -rec *.* | Where-Object {
$exclusions -notcontains $_.name } | `
Remove-Item -WhatIf
-WhatIf
結果に満足している場合は、スイッチを削除してください。それが-WhatIf
何をするかを示します(つまり、削除しません)
-オイシン
ファイルが現在のフォルダーに存在する場合、これを行うことができます。
Get-ChildItem -exclude (gc exclusions.txt) | Remove-Item -whatif
このアプローチは、各ファイルが別の行にあることを前提としています。ファイルがサブフォルダーに存在する場合は、Oisin のアプローチを使用します。
実際、これは再帰ではなく最初のディレクトリでのみ機能するようです。変更したスクリプトは正しく再帰します。
$exclusions = Get-Content .\exclusions.txt
dir -rec | where-object {-not($exclusions -contains [io.path]::GetFileName($_))} | `
where-object {-not($_ -is [system.IO.directoryInfo])} | remove-item -whatif