ucdsr2019
Goto Top

Batch speichert eine PDF - falls Name vorhanden: umbenennen

Hi Leute,
ich habe eine Batch die eine PDF Datei ausliest und diese PDF mit den ausgelesenen Daten (eine Lieferscheinnummer) umbenennt - siehe Code unten.

Es kommt nun oft vor, dass die ausgelesene Lieferscheinnummer (als PDF) schon vorhanden ist und die Batch die PDF so nun nicht mehr umbenennen kann - es folgt ein Fehler.
Ich suche nun ein Befehl womit die Batch die PDF Datei eine "(2)" nach der Lieferscheinnummer anfügt - kann mir hier jemand helfen?


@Echo off & setlocal
For /f "Delims=" %%A in ('Dir /B /A-D ".\DOC*.pdf"') Do Call :ProcPDF "%%A" "%%~nA.txt"  
Goto :Eof

:ProcPDF
pdftotext.exe %1
If defined Nummer set "Lieferschein-Nr."  
for /f "Tokens=2" %%B in ( 'findstr /I "Lieferschein-Nr." %2 ' ) Do Call :Trim Nummer %%B  
If Not Defined Nummer Echo Keine Nummer in %1 & goto :EOF
Ren %1 "%Nummer%.pdf"  
Del %2 /Q 2>NUL
echo Lieferscheine %Nummer% %1 mit Leerzeichen fertig
Goto :Eof 

:Trim 
Set "%1=%2"   
Goto :Eof


Vielen Dank vorab

Content-ID: 597822

Url: https://administrator.de/forum/batch-speichert-eine-pdf-falls-name-vorhanden-umbenennen-597822.html

Ausgedruckt am: 23.12.2024 um 19:12 Uhr

Doskias
Doskias 20.08.2020 um 11:53:08 Uhr
Goto Top
Hallo,

Verständnisfrage: Müssen die Lieferscheine nicht fortlaufend nummeriert werden? Wieso kann es eine Lieferscheinnummer doppelt geben?

Lösung für dein Problem: Wenn du die Lieferscheinnummer hast, dann zähle wie viele Dateien die Nummer bereits im Namen enthalten. Speichere diese Anzahl in eine Variable und erhöhe diese um 1. Hänge diese Zahl an die Lieferscheinnummer.

Kann ich dir den Code dafür schreiben? Ja.
Mache ich das? Nein.
Warum nicht? Weil du den GoTo-Befehl benutzt. face-smile
ucdsr2019
ucdsr2019 20.08.2020 um 12:16:15 Uhr
Goto Top
die Lieferscheinnummern sind fortlaufend, nur kommt es sehr oft zu Nachbestellungen/Bestelländerungen, hier müssen wir die gl Lieferscheinnummer noch einmal benutzen.

GoTo? ich habe mir den Code mit Hilfe aus Forum und Freunden basteln lassen, ich habe also keine Ahnung was "GoTo" bedeuten soll?

Trotzdem danke face-sad
SeaStorm
SeaStorm 20.08.2020 um 12:46:34 Uhr
Goto Top
und warum machst du das ganze wenn du von sowas keine Ahnung hast? Geschweigedenn gewillt bist das zu lernen, sondern nur von anderen fertiges haben willst.
Habt ihr keinen ITler?
Doskias
Doskias 20.08.2020 um 13:05:42 Uhr
Goto Top
Also du postest hier einen Code, der nicht von dir ist (und den du offenbar nicht verstehst) und möchtest die Lösung auch präsentiert haben?

oder anders:

Du hast eine Aufgabe bekommen, die Lösung ist von Freunden und Foren, funktioniert nicht und hier soll jetzt die funktionierende Lösung herkommen. Wieso bezahlt dein Chef dich und nicht die anderen? face-smile

Mein Tipp um voran zu kommen. Lerne PowerShell und mach es selbst oder gibt es jemanden, der es auch erweitern kann falls dies nötig sein wird. Dann helfen wir dir her gerne weiter.
ucdsr2019
ucdsr2019 20.08.2020 aktualisiert um 14:03:18 Uhr
Goto Top
oh jeeee


Verständnisfrage: wieso antwortet man auf eine Frage, die man inhaltlich nicht beantwortet? ...zu viel Zeit?
SeaStorm
SeaStorm 20.08.2020 um 14:20:42 Uhr
Goto Top
Denkanstoß geben nennt sich das.
Fragenbezogener Denkanstoß: IF EXIST
ucdsr2019
ucdsr2019 20.08.2020 um 14:55:59 Uhr
Goto Top
Danke für den Denkanstoß.

Leider funktioniert es noch nicht richtig, Ist die Verwendung von else unpassend?


@Echo off & setlocal
For /f "Delims=" %%A in ('Dir /B /A-D ".\DOC*.pdf"') Do Call :ProcPDF "%%A" "%%~nA.txt"  
Goto :Eof

:ProcPDF
pdftotext.exe %1
If defined Nummer set "Lieferschein-Nr."  
for /f "Tokens=2" %%B in ( 'findstr /I "Lieferschein-Nr." %2 ' ) Do Call :Trim Nummer %%B  
If Not Defined Nummer Echo Keine Nummer in %1 & goto :EOF

IF EXIST %1 (
        Ren %1 "%Nummer%(2).pdf"  
	Del %2 /Q 2>NUL
	echo Lieferscheine %Nummer% %1 mit Leerzeichen fertig
	Goto :Eof 
    ) ELSE (
        Ren %1 "%Nummer%.pdf"  
	Del %2 /Q 2>NUL
	echo Lieferscheine %Nummer% %1 mit Leerzeichen fertig
	Goto :Eof 
    )


:Trim 
Set "%1=%2"   
Goto :Eof
SeaStorm
SeaStorm 20.08.2020 um 16:30:35 Uhr
Goto Top
und verrätst du uns auch was nicht funktioniert ?
117471
117471 20.08.2020 um 18:05:13 Uhr
Goto Top
Hallo,

ich weiß nicht, ob das so klug ist, was Du vorhast. Wenn Du nur den Dateinamen matchst, wirst Du irgendwann derartige Konstrukte in deinem Ordner vorfinden:
47110815.pdf vom 20. März 2011
47110815(2).pdf vom 08.07.2016
47110815(2)(2).pdf vom 20.08.2020
[...]

Klüger wäre es, z.B. grundsätzlich das Datum anzuhängen. Die drei oben genannten Beipspiele würden dann so aussehen:
47110815_20110320.pdf
47110815_20160708.pdf
47110815_20200820.pdf

Ließe sich auch relativ leicht umsetzen.

Gruß,
Jörg
117471
117471 20.08.2020 aktualisiert um 18:12:55 Uhr
Goto Top
Hallo,

Ergänzung: Der Fehler liegt natürlich in dem Prozess, welcher die (doppelte) Lieferscheinnummer erzeugt. Doppelte Lieferscheine gibt es rein rechtlich gar nicht und technisch gibt es die nur, wenn Mitarbeiter faul sind und sich Recyclingprozesse ausdenken, die nicht mit den buchhalterisch Verantwortlichen abgestimmt sind.

Die "Goldrandlösung" wäre somit, in den Prozessen eindeutige Lieferscheinnummern zu generieren face-wink

Gruß,
Jörg
ucdsr2019
ucdsr2019 20.08.2020 um 18:37:15 Uhr
Goto Top
Testverlauf:

ich habe 5 PDFs

DOC1234.pdf (Lieferscheinnummer 123456)
DOC1234a.pdf (Lieferscheinnummer 123456)
DOC1234b.pdf (Lieferscheinnummer 123456)
DOC1234c.pdf (Lieferscheinnummer 123457)
DOC1234d.pdf (Lieferscheinnummer 123458)

Die Batch sollte nun folgendes machen:

123456.pdf
123456(2).pdf
123456(2)(2).pdf
123457.pdf
123458.pdf

die Batch macht aber folgendes:

DOC1234.pdf (Lieferscheinnummer 123456)
123456(2).pdf
DOC1234b.pdf (Lieferscheinnummer 123456)
123457.pdf
123458.pdf


@altm
die Vergabe des Datums geht leider nicht, da die doppelten Lieferscheine sehr oft an einem Tag eintreffen, somit wäre diese Datei wieder doppelt.

Der Prozess ist nicht fehlerhaft: der Lieferschein wird vom (Kunden) gegengezeichnet und dann archiviert. Auf einem LS sind manchmal verschiedene Artikeln aufgeführt, diese von verschiedenen Kunden entgegengenommen werden (z.B. Wohnheim, Krankenhaus etc.)
Ergo wir haben 1 LSN und 2/3 archivierte LSe
SeaStorm
SeaStorm 20.08.2020 um 18:43:14 Uhr
Goto Top
Du hast doch nirgends die Nummer vom Text getrennt.
Du hast zwar eine trim Funktion, aber die trimmt ja nix