Archiv verlassen und diese Seite im Standarddesign anzeigen : DOS Batch-Renaming mit Suffix aus TXT-Datei(en)
Hallo,
ich habe mehrere Video-Dateien mit entsprechenden TXT-Dateien (die Infos enthalten) für jede einzelne: z.B.
001.avi <-> 001.txt
Jede Video-Datei sollen nun kopiert werden und umbenannt.
In Zeile 10 ihrer entsprechenden Textdatei steht der Titel/Name des Videos, welcher nun angefügt werden soll.
aus 001.avi soll dann 001_Fruchtjoghurt.avi werden
wie müsste ich vorgehen?
Mr. Lolman
2008-02-21, 13:32:35
Ich hab da mal was gebastelt.
@echo off
dir /b *.avi > 1
for /f "tokens=1 delims=." %%j IN (1) DO (
set counter=%%j
find /n /v "" !counter!.txt |find "[10]" > 2
for /f "tokens=2 delims=]" %%k IN (2) DO set name=%%k
ren !counter!.avi !counter!_!name!.avi
)
del 1,2
Das Ganze muss aber mit verzögerter Variablenerweiterung gestartet werden. Die Aufgabe könnte man zwar auch anders lösen, aber dann wärs nicht mehr so schön kompakt.
Die verzögerte Erweiterung ruft man mit cmd /v auf, also lautet die korrekte Syntax zum Starten des Scripts "cmd /v /c [scriptname]".
EDIT: Eine Idee wär zwar, das Script über eine andere Batchdatei zu starten, da ist aber imo nicht besonders elegant. Eine andere Idee wärs, die Datei zur Laufzeit zu erzeugen und dann auch gleich zu starten, aber da hauen einem die ">" Zeichen alles zam. Das könnte man zwar mit Hochkommas unterbinden, aber um die wieder rauszubekommen, braucht man entweder erst wieder ein umständliches Script, oder eine aktive verzögerte Variablenerweiterung. Ein Teufelskreis also :devil:
Hallo,
vielen vielen Dank für die Mühe. Jetzt besteht das Problem dass der Titel leider gar nicht immer in Zeile 10 steht, dafür gibt es zum Glück ein anderes festes Merkmal:
Die Zeile die den Titel beinhaltet fängt immer mit E10 an, und sieht z.B. so aus:
E10Fruchtjoghurt Ende der Zeile
oder E10Fruchtjoghurt schmeckt nicht Ende der Zeile
Mr. Lolman
2008-02-21, 14:56:59
@echo off
if "%1%" NEQ "mitv" (
cmd /v /c tool.cmd mitv
exit
)
for /f "tokens=1 delims=." %%j IN ('dir /b *.avi') DO (
set counter=%%j
for /f "delims=@" %%k IN ('find "E10" !counter!.txt') DO set name=%%k
set name=!name:~3!
ren "!counter!.avi" "!counter!_!name!.avi"
)
EDIT: Eine Idee wär zwar, das Script über eine andere Batchdatei zu starten, da ist aber imo nicht besonders elegant. Eine andere Idee wärs, die Datei zur Laufzeit zu erzeugen und dann auch gleich zu starten, aber da hauen einem die ">" Zeichen alles zam. Das könnte man zwar mit Hochkommas unterbinden, aber um die wieder rauszubekommen, braucht man entweder erst wieder ein umständliches Script, oder eine aktive verzögerte Variablenerweiterung. Ein Teufelskreis also :devil:
Mann, denk ich manchmal kompliziert. Mit obigem Code startet sich das Script nochmal selbst, mit aktiver verzögerter Variablenerweiterung - sofern mans "tool.cmd" genannt hat.
EDIT: Was für Filme sind das überhaupt? Etwa private Urlaubsvideos? :naughty:
EDIT2: Hab das Script ein bisschen gestrafft und ein paar unschöne Dateischreibaktionen entfernt.
@echo off
if "%1%" NEQ "mitv" (
cmd /v /c tool.cmd mitv
exit
)
dir /b *.avi > 1
for /f "tokens=1 delims=." %%j IN (1) DO (
set counter=%%j
find "E10" !counter!.txt > 2
for /f "delims=@" %%k IN (2) DO set name=%%k
set name=!name:~3!
ren "!counter!.avi" "!counter!_!name!.avi"
)
del 1,2
Ignoriert dieses Script den Dateinamen der TXT-Datei und berücksichtigt nur ihren Inhalt?
Ich werde es gleich ausprobierne, sieht ja lecker aus. :)
Mr. Lolman
2008-02-21, 15:07:56
Das Script ignoriert auch den Dateinamen der avi-Datei. Es geht bloß davon aus, dass zu irgendeinem avi-File auch ein txt-File mit gleichem Dateinamen existiert. Also ob die Filme nun 001.avi oder Obstsalat.avi heissen, ist völlig egal.
Es gibt aber weder Checks, ob die txt-Datei tatsächlich existiert und ob der Filmname in der txt-Datei auch nur aus, für Dateinamen, gültigen Zeichen besteht.
Das Script ignoriert auch den Dateinamen der avi-Datei. Es geht bloß davon aus, dass zu irgendeinem avi-File auch ein txt-File mit gleichem Dateinamen existiert. Also ob die Filme nun 001.avi oder Obstsalat.avi heissen, ist völlig egal.
Absolute spitze,
es klappt. :)
Allerdings, was ich vergaß, sollte er vorher eine Kopie der AVI machen und diese dann umbenennen.
Mensch, bin ich eine Niete im Programmieren. :)
Mr. Lolman
2008-02-21, 15:41:45
Tool2.cmd - macht eine Kopie aller Filme im Verzeichnis und verwendet bloß die ersten 3 Zeichen fürn Dateinamen. ;)
@echo off
if "%1%" NEQ "mitv" (
cmd /v /c tool2.cmd mitv
exit
)
for /f "tokens=1 delims=." %%j IN ('dir /b *.avi') DO (
set counter=%%j
set name=!counter:~0,3!
copy "!counter!.avi" "!name!.avi"
)
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.