Цель:
Удалить аудиофайлы в папке, которые не указаны в файле List.txt.
Чтение List.txt для сравнения с файлами в папке audio и удаление файлов, не указанных в списке.
Содержимое 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
Какая команда удаляет файл из папки audio, если значение !$Result
true?
решение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;
PowerShell2
$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-Object:
%
символ ' ', ForEach