mrchris1899
Goto Top

Dateiname mit hochlaufenden Index mittels Batch - Programmierung

Hallo Zusammen,

ich bin ganz neu im Bereich der Batch-Programmierung deshalb kenne ich mich kaum aus und bin auf eure Hilfe angewiesen.

Mein Ziel ist es in einer Batch-Datei eine Dateiabfrage zu starten, also zu überprüfen ob sich eine Datei im aktuellen Ordner befindet und dabei beim erstellen einer pdf-Datei ein Index hochzuzählen.

Also konkrekt macht das Programm folgendes bzw. soll folgende Funktionalität erreichen:
Das Batchprogramm konvertiert mehrere jpgs in ein pdf. Beim ersten Start des Batchprogramm soll nun eine pdf. mit dem Namen Begriff_0 erstellt werden.
0 soll hier ein Index sein und bei einem erneuten Start des Batchprogramms soll dieses nun aber erkennen, dass eine Datei (Begriff_0) mit dem Index 0 bereits vorliegt und nun
selbstständig den Index hochzählt, also eine pdf-Datei mit dem Namen Begriff_1 erzeugt.

Ich hab versucht mir ein Konstrukt aus if-Abfrage und for-Schleife zu basteln, das läuft aber noch nicht so wie erhofft.

set /a counter=0
for %%i IN (".\%problemid%.pdf") DO (  
if exist .\%problemid%.pdf GOTO WAHR
"C:\Program Files\ImageMagick-7.0.9-Q16\convert.exe" *.jpg .\%problemid%.pdf  
:WAHR
"C:\Program Files\ImageMagick-7.0.9-Q16\convert.exe" *.jpg .\%problemid%_%counter%.pdf  
  set /a counter+=0
  )

In .\%problemid% ist die Variable abgespeichert die die Pdf-Datei als Dateinamen erhalten soll (hier im Bsp. Begriff)
Mittels C:\Program Files\ImageMagick-7.0.9-Q16\convert.exe" *.jpg rufe ich das Programm auf, welche die jpgs in ein pdf konvertiert.

Eigentlich ist eine if-Abfrage doch überflüssig, wenn man den Dateinamen kontinuierlich hochlaufen lässt oder?

Ich hoffe Ihr könnt mir dabei helfen face-smile

Vielen Dank!!

Christopher

Content-Key: 549176

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

Printed on: April 23, 2024 at 19:04 o'clock

Member: TK1987
Solution TK1987 Feb 22, 2020 at 19:31:37 (UTC)
Goto Top
Moin,

Zitat von @mrchris1899:
Ich hab versucht mir ein Konstrukt aus if-Abfrage und for-Schleife zu basteln, das läuft aber noch nicht so wie erhofft.
Kein Wunder, deine For-Schleife ergibt so auch keinen Sinn.
Eigentlich ist eine if-Abfrage doch überflüssig, wenn man den Dateinamen kontinuierlich hochlaufen lässt oder?
So ist es. Darüber hinaus sind If-Abfragen in CMD leider auch ein Laufzeittechnischer Albtraum und sollten möglichst vermieden werden.
@echo off
SetLocal EnableDelayedExpansion

set ProblemID=Begriff
set Counter=0

:: Vorhandene Dateien Zählen
	for /f "Delims=" %%A in ('dir /b "%ProblemID%*.pdf"') do set /a Counter+=1  

:: Neue Dateien erzeugen
	for /f "Delims=" %%A in ('dir /b *.jpg') do (  
		"C:\Program Files\ImageMagick-7.0.9-Q16\convert.exe" "%%A" "%ProblemID%_!Counter!.PDF"  
		set /a Counter+=1
		)
Member: mrchris1899
mrchris1899 Feb 24, 2020 at 10:16:11 (UTC)
Goto Top
Moin,

vielen vielen Dank für deine ausführliche Lösung! Die funktioniert schon mal sehr gut.

Ein Problem ist jedoch noch vorhanden und zwar muss man der zweiten for-Schleife, die die Dateien erzeugt, nicht noch vorgeben bis wohin sie hochzählen darf. Also als Beispiel die erste for Schleife gibt für Counter einen Wert von 4 aus. Dann soll die zweite for-Schleife ja nur neue Dateien bis zum Index Counter=4 erstellen. Das ist aktuell noch das Problem, also dass Dateien bis zum letzten Index (6) erstellt werden, jedoch nur Dateien bis zum Index 2 vorliegen.