목표:
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: 목록에 있는 파일을 제외한 모든 파일 삭제
다음은 귀하가 설명하는 대로 이 작업에 작동하는 두 가지 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; };
};
지원 리소스
-
-notin
- 값이 컬렉션에 없습니다. -
기준별칭Foreach-Object의 경우: '
%
' 기호, ForEach