tom4080
Goto Top

Dateinamen lesen, speichern und erzeugte Datei umbenennen

Hallo,
ich bin hier neu und habe eine wahrscheinlich einfache Frage, komme aber selbst nicht weiter. Hier mein Problem:

Mit dem jpegextractor.java ist es möglich z.B. die in einer PDF-Datei enthalten Bilder zu extrahieren. Dazu folgendes kleines Skript (Bilder_extrahieren.cmd):

%~d0
cd %~p0
java jpegextractor %1

In dem die PDF-Datei auf die Bilder_extrahieren.cmd per Maus gezogen wird, werden im Verzeichnis die in der pdf-Datei enthaltenen jpg als output0.jpg, output1.jpg ... gespeichert. Ich möchte die Dateien nun automatisch so umbenennen, dass Sie den Namen der pdf-Datei mit einem nachgestellten Zähler erhalten - oder einfacher gesagt, "output0.jpg" soll geändert werden in "Name_der_pdf-0.jpg". Das Skript soll also erst den Dateinamen der pdf-Datei lesen und speichern. Dann die Bilder extrahieren und wenn dann die output0.jpg etc gespeichert sind, sollen diese umbenannt werden. Hört sich eigentlich nicht schwierig an, ich komme aber auch nach dem Lesen etlicher Forumsbeiträge nicht weiter.

Ich hoffe jemand kann mir helfen ??

Content-Key: 184568

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

Ausgedruckt am: 28.03.2024 um 19:03 Uhr

Mitglied: bastla
bastla 07.05.2012 um 21:31:19 Uhr
Goto Top
Hallo tom4080 und willkommen im Forum!

Etwa so:
@echo off & setlocal
cd /d "%~dp0"  
java jpegextractor %1
for %%i in (output*.jpg) do set "ONr=%%~ni" & call :ProcessFile "%%i" "%~n1"  
goto :eof

:ProcessFile
ren %1 "%~2%ONr:*output=%%~x1"  
goto :eof
Grüße
bastla
Mitglied: tom4080
tom4080 09.05.2012 um 08:36:54 Uhr
Goto Top
Hallo bastla,
es funktioniert prima, genauso wie gewünscht. Herzlichen Dank!

ABER ich verstehe es nicht. Gibt es gute Literatur zum Thema Skriptprogrammierung?


Grüße, tom4080
Mitglied: bastla
bastla 09.05.2012 um 10:38:07 Uhr
Goto Top
Hallo tom4080!

Literaturempfehlung habe ich leider kein zu bieten, aber zumindest eine kurze Erklärung zum Ablauf:
  • In Zeile 2 habe ich Deine bisherigen Zeilen 1 und 2 zuammengefasst - damit wird in das Verzeichnis gewechselt, in dem sich die Batchdatei selbst (%0) befindet - dadurch muss in weiterer Folge nur mehr mit Dateinamen, aber nicht mit Pfaden hantiert werden.
  • Sie Schleife in Zeile 4 geht alle jpg-Dateien, deren Name mit "output" beginnt durch, speichert nur den Namen (also ohne ".jpg") in der Variablen %ONr% und ruft für die weitere Verarbeitung das Unterprogramm ":ProcessFile" auf - dabei werden der komplette Dateiname sowie der Name (wieder ohne Typ, daher "'%~n1" der pdf-Datei übergeben und kommen im Unterprogramm als %1 und %2 an.
  • Die Zeile 8 bedeutet: Führe eine Umbenennung der als Parameter 1 übergebenen "output*.jpg"-Datei durch, wobei sich der neue Name zusammensetzt aus
    • %~2 (=pdf-Dateiname ohne umgebende Anführungszeichen - diese wurden bei der Übergabe gesetzt, um für den Fall vorzusorgen, dass sich im Dateinamen Leerzeichen befinden) plus
    • %ONr:*output=% - durch diese Schreibweise wird "output" am Beginn der Variablen %ONr% (in welcher ja "outputNummer steht) durch das was zwischen = und % steht (also nix face-wink) ersetzt - damit bleibt nur noch die Nummer, und
    • %~x1, dre Dateiendung der übergebenen Datei (also ".jpg")
  • Das "goto :eof" in Zeile 5 sorgt dafür, dass nach dem Durchlaufen aller gefundenen "output*.jpg" der Batch endet (und nicht nochmals das Unterprogramm ausgeführt wird), und jenes in Zeile 9 signalisiert das Ende des Unterprogrammes (ist hier eigentlich überflüssig, da es danach ohnehin keine weiteren Batchzeilen gibt).

Grüße
bastla
Mitglied: tom4080
tom4080 09.05.2012 um 11:23:53 Uhr
Goto Top
Hallo bastla,
nochmals besten Dank!

Grüße, tom4080