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

지원 리소스

관련 정보