mrroso
Goto Top

Videodateien umbenennen

Hallo,

ich habe mir eine Batch Datei gebastelt, welche mir den Anfang von den Dateinamen abschneiden soll.
Also das Datum, eine 4 stellige Nummer und den Sender.

Mein Script:

FOR %%a in (*.*) do for /f "delims=- tokens=3,4" %%i IN ("%%a") DO echo ren "%%a" "%%i - %%j"  

Ausgabe:
ren "20211211 2052 - ONE HD - Die Kennedys 06 - Die Kubakrise (2011).eit" " Die Kennedys 06 - Die Kubakrise (2011).eit"
ren "20211211 2052 - ONE HD - Die Kennedys 06 - Die Kubakrise (2011).ts" " Die Kennedys 06 - Die Kubakrise (2011).ts"
ren "20211211 2052 - ONE HD - Die Kennedys 06 - Die Kubakrise (2011).ts.ap" " Die Kennedys 06 - Die Kubakrise (2011).ts.ap"
ren "20211211 2052 - ONE HD - Die Kennedys 06 - Die Kubakrise (2011).ts.cuts" " Die Kennedys 06 - Die Kubakrise (2011).ts.cuts"
ren "20211211 2052 - ONE HD - Die Kennedys 06 - Die Kubakrise (2011).ts.meta" " Die Kennedys 06 - Die Kubakrise (2011).ts.meta"
ren "20211211 2052 - ONE HD - Die Kennedys 06 - Die Kubakrise (2011).ts.sc" " Die Kennedys 06 - Die Kubakrise (2011).ts.sc"
ren "20211211 2147 - ZDF_neo HD - Junior (1994).eit" " Junior (1994).eit - "
ren "20211211 2147 - ZDF_neo HD - Junior (1994).ts" " Junior (1994).ts - "
ren "20211211 2147 - ZDF_neo HD - Junior (1994).ts.ap" " Junior (1994).ts.ap - "
ren "20211211 2147 - ZDF_neo HD - Junior (1994).ts.cuts" " Junior (1994).ts.cuts - "
ren "20211211 2147 - ZDF_neo HD - Junior (1994).ts.meta" " Junior (1994).ts.meta - "
ren "20211211 2147 - ZDF_neo HD - Junior (1994).ts.sc" " Junior (1994).ts.sc - "
ren "20220418 2312 - ZDF_neo HD - Inspector Barnaby 129 - S22E03 - Alles für die Familie (2021).ts.meta" " Inspector Barnaby 129 - S22E03 "
ren "20220418 2312 - ZDF_neo HD - Inspector Barnaby 129 - S22E03 - Alles für die Familie (2021).ts.sc" " Inspector Barnaby 129 - S22E03 "
ren "20220418 2327 - rbb Berlin HD - Polizeiruf 110 - E097 - Treibnetz (1985).ts.meta" " Polizeiruf 110 - E097 "
ren "20220418 2327 - rbb Berlin HD - Polizeiruf 110 - E097 - Treibnetz (1985).ts.sc" " Polizeiruf 110 - E097 "
ren "20220419 0042 - ZDF_neo HD - Inspector Barnaby 130 - S22E04 - Die Vogelscheuchen-Morde (2021).eit" " Inspector Barnaby 130 - S22E04 "
ren "20220419 0042 - ZDF_neo HD - Inspector Barnaby 130 - S22E04 - Die Vogelscheuchen-Morde (2021).ts" " Inspector Barnaby 130 - S22E04 "
ren "20211229 2302 - 3sat HD - Sierra Charriba (1965).eit" " Sierra Charriba (1965).eit - "
ren "20211229 2302 - 3sat HD - Sierra Charriba (1965).ts" " Sierra Charriba (1965).ts - "
ren "20211229 2302 - 3sat HD - Sierra Charriba (1965).ts.ap" " Sierra Charriba (1965).ts.ap - "
ren "20211229 2302 - 3sat HD - Sierra Charriba (1965).ts.cuts" " Sierra Charriba (1965).ts.cuts - "
ren "20211229 2302 - 3sat HD - Sierra Charriba (1965).ts.meta" " Sierra Charriba (1965).ts.meta - "
ren "20211229 2302 - 3sat HD - Sierra Charriba (1965).ts.sc" " Sierra Charriba (1965).ts.sc - "
ren "20220126 0017 - hr-fernsehen HD - Arabeske (1966).eit" "fernsehen HD - Arabeske (1966).eit"
ren "20220126 0017 - hr-fernsehen HD - Arabeske (1966).ts" "fernsehen HD - Arabeske (1966).ts"
ren "20220126 0017 - hr-fernsehen HD - Arabeske (1966).ts.ap" "fernsehen HD - Arabeske (1966).ts.ap"
ren "20220126 0017 - hr-fernsehen HD - Arabeske (1966).ts.cuts" "fernsehen HD - Arabeske (1966).ts.cuts"
ren "20220126 0017 - hr-fernsehen HD - Arabeske (1966).ts.meta" "fernsehen HD - Arabeske (1966).ts.meta"
ren "20220126 0017 - hr-fernsehen HD - Arabeske (1966).ts.sc" "fernsehen HD - Arabeske (1966).ts.sc"

Bei dem ersten Dateinamen (20211211 2052 - ONE HD - Die Kennedys 06 - Die Kubakrise (2011).eit) klappt es auch so weit, bis auf ein Leerzeichen vor dem Dateinamen (" Die Kennedys 06 - Die Kubakrise (2011).eit").
Bei dem zweiten Dateinamen (20211211 2147 - ZDF_neo HD - Junior (1994).ts.ap) wird " - " nach dem Dateiende angehangen (" Junior (1994).ts.ap - "). Dies ist mir soweit klar, da ja der 4. Token ( - %%j) ausgeben wird.
Bei dem dritten Dateinamen (20220418 2312 - ZDF_neo HD - Inspector Barnaby 129 - S22E03 - Alles für die Familie (2021).ts.meta) wird nur " Inspector Barnaby 129 - S22E03 " ausgegeben.
Beim sechsten Dateinamen (Arabeske (1966).ts.cuts) wird "fernsehen HD - Arabeske (1966).ts.cuts" ausgegeben. Dies ist mir auch klar, da ja der 3. und 4. Token ausgeben wird.
20220126 0017 - hr-fernsehen HD - Arabeske (1966).ts
token1 token2 token4 token4

Ich benötige einen Script wo "20220126 0017 - hr-fernsehen HD - " oder "20220418 2327 - rbb Berlin HD - " abgeschnitten wird und der Rest "Arabeske (1966).eit" oder "Inspector Barnaby 129 - S22E03 - Alles für die Familie (2021).ts.meta" stehen bleibt.

Ich habe schon an Anzahl der Zeichen gedacht, aber die ist ja nicht gleich groß
Kann mir jemand einen Denkanstoß geben?

Content-Key: 4865431562

Url: https://administrator.de/contentid/4865431562

Printed on: May 20, 2024 at 07:05 o'clock

Member: TK1987
Solution TK1987 Dec 05, 2022 updated at 14:56:58 (UTC)
Goto Top
Moin,

das kann so ja nicht funktionieren. Du hast z.B. in "hr-fernsehen HD" einen Bindestrich, der bei den anderen nicht vorhanden ist und dir somit andere Tokens erzeugt.

Um das für die obigen Dateien hinzubekommen, musst du die Zeichenketten schon wirklich nach der zusammenhängenden Zeichenkette " - " abschneiden, statt einfach nur bei Bindestrichen oder Leerzeichen:
@echo off
for %%A in (*) do call :Umbenennen "%%~A"  
goto :EoF

:Umbenennen
set "newName=%~nx1"  
set "newName=%newName:* - =%"  
set "newName=%newName:* - =%"  
ren "%~1" "%newName%"  

Gruß Thomas
Member: erikro
erikro Dec 05, 2022 at 15:41:49 (UTC)
Goto Top
Moin,

Zitat von @MrRoso:

Ich habe schon an Anzahl der Zeichen gedacht, aber die ist ja nicht gleich groß
Kann mir jemand einen Denkanstoß geben?

Ja: Nimm eine Programmiersprache, die regex kann. Dann musst Du nicht mit so wilden Konstrukten arbeiten. Da bietet sich die Powershell an:

$files = Get-ChildItem -File

foreach($file in $files) {

    $newname = $file.basename
    $newname -replace '(.*?-.*?-\s)(.*)','$2'  
    rename-item -path $file.fullname -NewName "$newname.$($file.extension)"  
    
}

Ungetestet.

hth

Erik
Member: erikro
erikro Dec 05, 2022 at 15:43:42 (UTC)
Goto Top
Zitat von @TK1987:

Moin,

das kann so ja nicht funktionieren. Du hast z.B. in "hr-fernsehen HD" einen Bindestrich, der bei den anderen nicht vorhanden ist und dir somit andere Tokens erzeugt.

Das könnte bei meiner Lösung noch ein Problem sein. face-wink
Member: TK1987
Solution TK1987 Dec 05, 2022 at 15:47:07 (UTC)
Goto Top
Moin,

Zitat von @erikro:
Das könnte bei meiner Lösung noch ein Problem sein. face-wink
Foreach ($File in Get-ChildItem -File) {
  Rename-Item $File.FullName -NewName ($File.Name -Replace "^.*? - .*? - ")  
}

Gruß Thomas
Mitglied: 4863114660
4863114660 Dec 05, 2022 updated at 16:13:11 (UTC)
Goto Top
Oder als Einzeiler
Get-ChildItem 'C:\Ordner' -File | ?{$_.Name -match '^[^-]+-[^-]+- '} | rename-item -NewName {$_.Name.replace($matches,'')} -verbose  
Gruß S.
Member: TK1987
TK1987 Dec 05, 2022 at 16:40:02 (UTC)
Goto Top
Zitat von @4863114660:
Oder als Einzeiler
Mein Code ist doch im Prinzip schon ein Einzeiler, die Zeilenumbrüche dienen doch lediglich der Übersichtlichkeit und können genausogut einfach weggelassen werden face-smile

Gruß Thomas
Mitglied: 4863114660
4863114660 Dec 05, 2022 updated at 16:51:07 (UTC)
Goto Top
Nur das umbenennen nach einem erneuten Ausführen im selben Ordner auf den selben Namen wenn nichts ersetzt werden muss ist dann etwas unschön aber muss jeder selbst wissen face-smile.
Member: TK1987
TK1987 Dec 05, 2022 at 16:57:32 (UTC)
Goto Top
Dann würde ich aber schlicht
Get-Childitem -File "* - * - *"  
bevorzugen. Hohere Performance als das Where-Object gepipe.

Gruß Thomas
Member: MrRoso
MrRoso Dec 05, 2022 at 18:40:40 (UTC)
Goto Top
Hallo Thomas,

dein Code:
@echo off
for %%A in (*) do call :Umbenennen "%%~A"  
goto :EoF

:Umbenennen
set "newName=%~nx1"  
set "newName=%newName:* - =%"  
set "newName=%newName:* - =%"  
ren "%~1" "%newName%"  

gefällt mir gut und macht was gewünscht ist.

An Dich und an alle anderen, vielen Dank für euere Unterstützung. Ihr seid die Besten.

Die andere Codes für Powershell muss ich mir noch in einer stillen Stunde anschauen.
Da ich bis jetzt noch gar nichts in Powershell gemacht habe, sind die Codes im Moment Böhmische Dörfer für mich.
Mein Ziel ist es zu verstehen wie und was da abläuft.

Gruß Martin
Member: MrRoso
MrRoso Dec 05, 2022 at 20:18:10 (UTC)
Goto Top
Hallo,

ich bin es noch einmal.

Habe gerade den Code:

Foreach ($File in Get-ChildItem -File) {
  Rename-Item $File.FullName -NewName ($File.Name -Replace "^.*? - .*? - ")  
}

von Thomas in Powershell aufgerufen. Dieser ist phantastisch.

Ich habe festgestellt, dass ich noch andere Dateien in dem Ordner habe.
Chuck und Larry - Wie Feuer und Flamme (2017).ts
Tatort Ballauf + Schenk 05 - Streng geheimer Auftrag (1998).ts

mit dem Batch Code bleibt dann nur noch Wie Feuer und Flamme (2017).ts und Streng geheimer Auftrag (1998) übrig.
Mit dem Powershell Code bleiben diese Dateien unangetastet.

Noch einmal vielen herzlichen Dank.

Gruß Martin