
Ich habe mich gefragt, ob es eine schnelle und einfache Möglichkeit gibt, nach Dateinamen mit mehreren Zeichen zu suchen und alle Zeichen danach zu löschen.
Wenn ich beispielsweise eine Datei mit dem Namen habe:
Great Movie Title 2021 1080p asldkfjalfj.mkv
Another Great Movie 1997 480p aldfasdfa.avi
Boring movie but its ok 2015 720p asadfqwr.mp4
1080p
Ich möchte , 720p
, 480p
im Dateinamen suchen und dann alles danach löschen.
Ich weiß, dass Sie die Windows-Batch-Schleife verwenden können For
, aber Sie können nur ein einzelnes Zeichen verwenden, um sie zu finden. Selbst wenn es eine Drittanbieter-App ist, die dies kann, kann ich sie anscheinend nicht finden.
Antwort1
Durchsuchen Sie das gesamte Laufwerk oder nur ein einzelnes Verzeichnis?
In jedem Fall kann PowerShell damit umgehen.
Dies betrifft das gesamte Laufwerk C: und benennt alles um, was 1080p im Dateinamen enthält:
cd c:\
Get-ChildItem -recurse -include *1080p* | foreach-object { $name = $_.fullname; $newname = $name -replace '1080p.*\.','1080p.'; rename-item $name $newname }
Sie könnten es dann für 480p und 720p wiederholen.
Antwort2
Power Shellist der richtige Weg.
Hier ist ein anderer Ansatz, mit dem Sie sie alle in einem Durchgang und leicht geändert erledigen können.
Dies würde vom obersten Ordner aus ausgeführt. Dadurch wird der -Path
(hier positionelle) Parameter freigegeben, um nach mehreren Dateitypen zu filtern, da -Path
im Gegensatz zu -Filter
ein Array von Werten angenommen werden kann.
Get-ChildItem *.mkv, *.avi, *.mp4 -Recurse | ForEach {
If ( $_.BaseName -match '^.+(1080p|720p|480p)' ) {
Rename-Item -LiteralPath $_.FullName -NewName ( $matches[0] + $_.Extension )
}
}
Der reguläre Ausdruck '^.+(1080p|720p|480p)'
passt zu allen Zeichen vom Anfang des Dateinamens bis einschließlich einer der mit "or'd" ( |
) aufgelösten Zeichenfolgen. Dieser Text wird im $matches
automatischen Attribut gespeichert und zum Erstellen des neuen Namens verwendet.