Powershell - Wildcards im Stringvergleich
Hallo zusammen,
ich finde leider mit Hilfe der Foren-/Googlesuche leider nichts, was mir weiterhilft.
Ich möchte gerne in einem Verzeichnis Dateien mit gleichen Namen auf wirkliche Gleichheit prüfen. Leider sind in dem Verzeichnis doppelte Dateien im Schema "Name - 1.mp3". habe nun versucht mir eine Schleife zu bauen die in etwa wie folgt aussieht:
Leider scheint der * nicht wirklich als Wildcard zu funktionieren, da ein manueller Test ein $False bringt. Da die Zahlen auch zweistellig sein können hatte ich gehofft mit dem * sowohl einstellige als auch zweistellige Zahlen zu "erwischen".
Jemand eine Idee?
Dank und Gruß
ich finde leider mit Hilfe der Foren-/Googlesuche leider nichts, was mir weiterhilft.
Ich möchte gerne in einem Verzeichnis Dateien mit gleichen Namen auf wirkliche Gleichheit prüfen. Leider sind in dem Verzeichnis doppelte Dateien im Schema "Name - 1.mp3". habe nun versucht mir eine Schleife zu bauen die in etwa wie folgt aussieht:
if ($files[$f].FullName.EndsWith(" - *.mp3"))
{
$file1 = $files[$f].FullName.Replace(" - *.mp3",".mp3")
}
Leider scheint der * nicht wirklich als Wildcard zu funktionieren, da ein manueller Test ein $False bringt. Da die Zahlen auch zweistellig sein können hatte ich gehofft mit dem * sowohl einstellige als auch zweistellige Zahlen zu "erwischen".
Jemand eine Idee?
Dank und Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 647015
Url: https://administrator.de/contentid/647015
Ausgedruckt am: 22.11.2024 um 13:11 Uhr
6 Kommentare
Neuester Kommentar
Mit einem "for each" hast du dann jeden Dateienamen in einer einzelnen Variable. Also brauchst du keine Wildcards mehr.
Du replacest es in der Variable selbst
$file1 -replace " - ", " "
und renamest danach die Datei als nächsten Befehl.
Oder, was ich gerade ergoogelt habe:
Get-ChildItem .. | Rename-Item -NewName { $_.Name.Replace(" - ", "") }
Du replacest es in der Variable selbst
$file1 -replace " - ", " "
und renamest danach die Datei als nächsten Befehl.
Oder, was ich gerade ergoogelt habe:
Get-ChildItem .. | Rename-Item -NewName { $_.Name.Replace(" - ", "") }
Solange dann nicht gleiche Namen im gleichen Ordner sind...
Da musst du aufpassen, weil viele Dateinamen haben das Minus als Trenner zwischen Interpret und Titel. Du müsstest also die Variable vorher noch prüfen wie lang der Rest hinter dem " - " ist und/oder eine Zahl ist - z.B. mit Regex.
Kleiner Tip:
Verwende Mediamonkey, es sucht dir alle Tracks heraus, die den gleichen Fingerprint besitzen (so kann man auch Single Versionen, Maxis und Remixe unterscheiden).
Da musst du aufpassen, weil viele Dateinamen haben das Minus als Trenner zwischen Interpret und Titel. Du müsstest also die Variable vorher noch prüfen wie lang der Rest hinter dem " - " ist und/oder eine Zahl ist - z.B. mit Regex.
Kleiner Tip:
Verwende Mediamonkey, es sucht dir alle Tracks heraus, die den gleichen Fingerprint besitzen (so kann man auch Single Versionen, Maxis und Remixe unterscheiden).
Dafür gibt es Group-Object um Dateien mit ähnlichen Dateinamen zu gruppieren ...
Ergebnis sind Objekte mit den Eigenschaften Count,Name,Group. In Count steht die Anzahl der Files mit dem "Namen", und in der Eigenschaft Group sind die Files enthalten die nach entfernen des Regex Pattern (" - \d+$") im Basename der Files gleich sind. über die Group kannst du dann mit nem Foreach itterieren ...
Gruß j.
ls 'D:\Ordner' -File -Filter *.mp3 | group {$_.Basename -replace ' - \d+$'}
Gruß j.