Ziel:
Löschen Sie Audiodateien in einem Ordner, die nicht in der Datei List.txt aufgeführt sind
Lesen der Datei „List.txt“, um sie mit den Dateien im Audioordner zu vergleichen, und Löschen der Dateien, die nicht in der Liste aufgeführt sind.
Inhalt von 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
}
}
Im Befehl „Entfernen“ wird die Meldung angezeigt:
Cannot bind argument to 'Path' parameter because it is null
Wie lautet der Befehl zum Entfernen der Datei aus dem Audioordner, wenn der Wert „ !$Result
true“ ist?
Antwort1
PowerShell: Alle Dateien außer denen in einer Liste löschen
Unten sind zwei PowerShell-Varianten aufgeführt, die für diese Aufgabe wie von Ihnen beschrieben funktionieren und die ich meinerseits auf Grundlage der von Ihnen bereitgestellten Details bestätigt habe und die so weit wie möglich emulieren.
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; };
};
Unterstützende Ressourcen
Informationen zu Vergleichsoperatoren
-notin
- Wert ist nicht in einer Sammlung-
StandardAliasefür Foreach-Objekt: das
%
Symbol ' ', ForEach