目的:
删除文件夹中未在 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; };
};
支持资源
-
-notin
- 值不在集合中 -
标准别名对于 Foreach 对象:'
%
' 符号,ForEach