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当值为真时,从音频文件夹中删除文件的命令是什么 ?

答案1

PowerShell:删除除列表中的文件之外的所有文件

下面是两个适用于此任务的 PowerShell 变体,正如您所述,我已根据您提供的详细信息在我这边确认了尽可能多的模拟。

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

支持资源

相关内容