14

次のようなテキスト ファイルにファイル名のリストがあります。

f1.txt
f2
f3.jpg

Powershell でこれらのファイル以外のすべてをフォルダーから削除するにはどうすればよいですか?

擬似コード:

  • テキスト ファイルを 1 行ずつ読み取る
  • ファイル名のリストを作成する
  • Recurse フォルダーとそのサブフォルダー
  • ファイル名がリストにない場合は削除します。
4

3 に答える 3

21

データ:

-- 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何をするかを示します(つまり、削除しません)

-オイシン

于 2010-01-06T00:01:53.270 に答える
6

ファイルが現在のフォルダーに存在する場合、これを行うことができます。

Get-ChildItem -exclude (gc exclusions.txt) | Remove-Item -whatif

このアプローチは、各ファイルが別の行にあることを前提としています。ファイルがサブフォルダーに存在する場合は、Oisin のアプローチを使用します。

于 2010-01-06T00:22:09.650 に答える
1

実際、これは再帰ではなく最初のディレクトリでのみ機能するようです。変更したスクリプトは正しく再帰します。

$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
于 2010-03-03T14:29:02.763 に答える