PowerShell: リスト内のファイルを除くすべてのファイルを削除する

PowerShell: リスト内のファイルを除くすべてのファイルを削除する

目的:
List.txt ファイルにリストされていないフォルダー内のオーディオ ファイルを削除する

List.txt を読み取ってオーディオ フォルダー内のファイルと比較し、リストに含まれていないファイルを削除します。

List.txtの内容:

05 - Earth Wind and Fire - September (The Reflex Revision).mp3
Electric Light Orchestra - Last Train To London (Bootleg Extended Dance Remix).flac
120 - Kool & The Gang - Get Down On It (Soul Funk House Remix).wav
$files = "C:\Users\$env:username\Desktop\Logs_LUFS\List Audio Files for Normalization.txt"
$location = "C:\Users\$env:username\Desktop\LUFS Audios\"

Get-Content $files | % {               
    $result = Get-ChildItem -Recurse "$location*$_*" 
    If(!$result) {
       Remove-Item $location* $result.Fullname
    }
}

削除コマンドでは、次のメッセージが表示されます。
Cannot bind argument to 'Path' parameter because it is null

!$Result値が trueの場合にオーディオ フォルダーからファイルを削除するコマンドは何ですか ?

答え1

PowerShell: リスト内のファイルを除くすべてのファイルを削除する

以下は、説明されているようにこのタスクに機能する 2 つの PowerShell バリエーションです。提供された詳細に基づいて、私の側で可能な限りエミュレートして確認しました。

パワーシェル 1

$files = Get-Content "C:\Users\$env:username\Desktop\Logs_LUFS\List Audio Files for Normalization.txt";
$location = "C:\Users\$env:username\Desktop\LUFS Audios\";
Get-ChildItem -Recurse $location -File -Exclude $files | Remove-Item;

パワーシェル2

$files = Get-Content "C:\Users\$env:username\Desktop\Logs_LUFS\List Audio Files for Normalization.txt";
$location = "C:\Users\$env:username\Desktop\LUFS Audios\";
             
Get-ChildItem -Recurse $location -File | %{
    If($_.Name -notin $files ){ Remove-Item -LiteralPath $_.FullName -Force; };
    };

サポートリソース

関連情報