PowerShell: eliminar todos los archivos excepto los de una lista

PowerShell: eliminar todos los archivos excepto los de una lista

Objetivo:
eliminar archivos de audio en una carpeta que no figuran en el archivo List.txt

Leer el List.txt para compararlo con los archivos de la carpeta de audio y eliminar los archivos que no figuran en la lista.

Contenido de la lista.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
    }
}

En el comando Eliminar, aparece el mensaje:
Cannot bind argument to 'Path' parameter because it is null

¿Cuál es el comando para eliminar el archivo de la carpeta de audio cuando el valor !$Resultes verdadero?

Respuesta1

PowerShell: eliminar todos los archivos excepto los de una lista

A continuación se muestran dos variaciones de PowerShell que funcionan para esta tarea tal como usted describe, lo cual he confirmado por mi parte emulando tanto como sea posible según los detalles que proporcionó.

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;

PowerShell 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; };
    };

Recursos de apoyo

información relacionada