Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PDF auslesen und per Batch umbenennen

Frage Entwicklung Batch & Shell

Mitglied: mimuCH

mimuCH (Level 1) - Jetzt verbinden

28.04.2010, aktualisiert 20.04.2015, 8450 Aufrufe, 32 Kommentare, 4 Danke

Guten Morgen

Ich habe einige Beiträge gelesen und "Zeile aus Datei auslesen und diese dann umbenennen" war am nächsten zu meiner frage, leider komm ich aber nicht mehr weiter.

ps: meine Batchkentnisse sind sehr verstaubt

Das Problem ist das ich jeden Tag über 50 neue PDFs habe die nach Datum benannt sind. z.B: 20100209100805.pdf

Das PDF Dokument sieht so aus:
...........
*BILD*
......
Method name: Std-FAST
Sample ID: GLN00146-011-F1 (# 38)
Pe a k Numb e r # A r e a % Re t . T i me A r e a BC
....

Ich möchte die SampleID auslesen und damit die PDF-Datei umbenennen. In unserem Beispiel wird 20100209100805.pdf zu GLN00146-011-F1.pdf

Mein Lösungsansatz wäre:

1. PDF wird zu TXT umgewandelt
2. SampleID wird aus TXT ausgelesen
3. PDF Datei wird mit der SampleD umbenannt
4. TXT Datei wird gelöscht

Für eine schnelle Hilfe wäre ich dankbar

hg mimu
32 Antworten
Mitglied: LotPings
28.04.2010 um 11:04 Uhr
Hallo mimu,

es gibt zwar die pdftools mit einer pdf2txt, aber ob der Text so einfach extrahiert werden kann, hängt stark vom Aufbau und der Herkunft der PDF-Datei ab.
Zum Testen schlage ich vor das du in einem CMD-Window einfach mal eingibst

findstr /I "Sample.ID" 20100209100805.pdf
Und rückmeldest ob da eine verarbeitbare Ausgabe erscheint.

Gruß
LotPings
Bitte warten ..
Mitglied: mimuCH
28.04.2010 um 11:33 Uhr
Hoi LotPings

Ich habe mal den pdf zu txt umgewandelt und es sieht nicht schlecht aus:

...einige Zahlen
7.025
Method name: Std-FAST
Analysed: 24.03.2010 18:02
GC method: Std-FAST
Sample ID: GLN00146-011-F1 (# 38)
Pe a k Numb e r # A r e a % Re t . T i me A r e a BC
- - - - - - - - - - - - - - - - - - - - - -
.......weitere Zahlen

mit dem Befehl:

findstr /I "Sample ID" 20100209100805.pdf

gab folgende Ausgabe:

<< /Type /Pages /Kids [
<?xpacket begin='...' id='W5M0MpCehiHzreSzNTczkc9d'?>
<rdf:Description rdf:about='683bfc6d-39c4-11df-0000-0538daf7fac7' xmlns:xap
ttp://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='683bfc6d-39c4-11df-0000-0
f7fac7'/>
/ID [<631E73F378A39D964118B751905A5BE6><631E73F378A39D964118B751905A5BE6>]

Was nicht wirklich brauchbar ist
Bitte warten ..
Mitglied: LotPings
LÖSUNG 28.04.2010, aktualisiert 20.04.2015
Zitat von mimuCH:
Ich habe mal den pdf zu txt umgewandelt und es sieht nicht schlecht aus:

...einige Zahlen
7.025
Method name: Std-FAST
Analysed: 24.03.2010 18:02
GC method: Std-FAST
Sample ID: GLN00146-011-F1 (# 38)
Das scheint also zu klappen.

findstr /I "Sample ID" 20100209100805.pdf
Tja, jetzt bin ich pingelig,
in meiner Zeile stand ein Puntk zwischen Sampe und ID und das war Absicht.
Mit Leerzeichen behandelt findstr die zwei Begriffe unabhängig bei der Suche , sprich er schmeisst alle Zeilen raus die entweder Sample oder ID enthalten.

Hiermit könntest du den Namen aus der Txt-Datei extrahieren (ungetestet):
01.
@Echo off 
02.
for /f "Tokens=2 delims=:(" %%A in ( 
03.
  'findstr /I "Sample.ID" 20100209100805.txt' 
04.
    ) Do Call :Trim SampleID %%A 
05.
Echo SampleID: %SampleID% 
06.
Goto :Eof 
07.
:Trim 
08.
Set %1=%2 
09.
Goto :Eof
Gruß
LotPings
Bitte warten ..
Mitglied: bastla
LÖSUNG 28.04.2010, aktualisiert 20.04.2015
@LotPings
Mit Leerzeichen behandelt findstr die zwei Begriffe unabhängig bei der Suche , sprich er schmeisst alle Zeilen raus die entweder Sample oder ID enthalten.
Wenn Du aber ganz besonders pingelig sein wolltest (und tatsächlich nur "Sample ID" - also durch ein Leerzeichen, und nur durch ein solches getrennt - gefunden werden soll), könntest Du ja noch zu "/c:" greifen ...

Grüße
bastla
Bitte warten ..
Mitglied: LotPings
28.04.2010 um 12:30 Uhr
@bastla,
ja ich weß, aber wenn ich den Suchbegriff modifiziere bin ich meist zu faul nochmal vorne was zu ändern
Aber du hast schon Recht, man umgeht die Macken von findstr schon intuitiv ohne darüber nachzudenken das Anfänger den Code nicht so ohne weiteres nachvollziehen können.

[OT]
Wäre es nicht schön wenn findstr vollwertige RegEx beherschen würde .. seufz
[/OT]

Gruß
LotPings
Bitte warten ..
Mitglied: bastla
28.04.2010 um 12:38 Uhr
[OT]
@LotPings
Wäre es nicht schön wenn findstr vollwertige RegEx beherschen würde .. seufz
Würde es dann noch zum gleichen Betriebssystem gehören?

Grüße
bastla
[/OT]
Bitte warten ..
Mitglied: mimuCH
28.04.2010 um 13:15 Uhr
sorry bei findstr /I "Sample.ID" 20100209100805.pdf gab es keine Ausgabe, deshalb habe ich es mit "Sample ID" probiert.


dass txt extrahieren hat funktioniert und es gab mir die gewünschte Ausgabe.
Bitte warten ..
Mitglied: LotPings
LÖSUNG 28.04.2010, aktualisiert 20.04.2015
Prima, wenn du bei dem Lösungsansatz

Mein Lösungsansatz wäre:
1. PDF wird zu TXT umgewandelt
2. SampleID wird aus TXT ausgelesen
3. PDF Datei wird mit der SampleD umbenannt
4. TXT Datei wird gelöscht

weitere Hilfe brauchst, einfach fragen.

Gruß
LotPings
Bitte warten ..
Mitglied: LotPings
LÖSUNG 28.04.2010, aktualisiert 20.04.2015
Hier eine komplettlösung, wenn sie noch gefragt ist:
01.
@Echo off 
02.
:: Batch benötigt pdftptext.exe aus diesem Paket (nicht auf Win x64 lauffähig) 
03.
:: ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.02pl4-win32.zip 
04.
For /f "Delims=" %%A in ('Dir /B /A-D ".\20*.pdf"') Do Call :ProcPDF "%%A" "%%~nA.txt" 
05.
Goto :Eof 
06.
 
07.
:ProcPDF 
08.
PdfToTxt.exe %1 
09.
If defined SampleID set "SampleID=" 
10.
for /f "Tokens=2 delims=:(" %%B in ( 'findstr /I "Sample.ID" %2 ' ) Do Call :Trim SampleID %%B 
11.
If Not Defined SampleID Echo Keine SampleID in %1 & goto :EOF 
12.
Echo Ren %1 "%SampleID%.PDF" 
13.
Del %2 /Q 2>NUL 
14.
Goto :Eof  
15.
 
16.
:Trim  
17.
Set %1=%2  
18.
Goto :Eof
Gruß
LotPings

Edit:Wenn die Ausgabe korrekt erscheint das Echo vor dem Ren Befehl entfernen.
Bitte warten ..
Mitglied: mimuCH
29.04.2010 um 13:16 Uhr
Hallo LotPings

Erst mal einen grossen Dank an dir. Ich habe den Batch getestet und komme leider nicht weiter

Es will immer den PDF mit Analysed umbennen.
Ausgabe sah so aus: Ren "20100209100805.pdf" "Analysed .PDF"

Ich habe den PDF in Text mit deinem Tool umgewandelt uns es sieht so aus:

...zahlen
12.998
Method name: Analysed: GC method: Sample ID:
Std-FAST 24.03.2010 18:02 Std-FAST GLN00146-011-F1 (# 38)
P e a k Numb e r # ---------------1 2 To t a l s
...weitere zahlen
Bitte warten ..
Mitglied: bastla
29.04.2010 um 13:29 Uhr
Hallo mimuCH!
Es will immer den PDF mit Analysed umbennen.
Da "findstr" zeilenorientiert arbeitet, ist das nicht weiter verwunderlich - gefunden und zerlegt wird, anders als in Deinem Beispiel von oben:
Sample ID: GLN00146-011-F1 (# 38)
hier eben:
Method name: Analysed: GC method: Sample ID:
Mit "tokens=2 delims=:" wird diese Zeile anhand des Trennzeichens ":" in 4 (oder 5, falls nach dem letzten ":" noch zB Leerzeichen folgen sollten) Teile ("tokens") zerlegt, wobei sich als zweiter Teil eben " Analysed" ergibt ...

Es könnte zwar die Suche verfeinert werden, indem verlangt wird, dass "Sample ID:" am Zeilenanfang stehen muss - dies würde aber nur dazu führen, dass hier eben gar keine Zeile mehr gefunden würde; insofern ist es also tatsächlich (wie von LotPings bereits gemutmaßt) nicht so so einfach, an die Informationen zu kommen ...

Grüße
bastla
Bitte warten ..
Mitglied: LotPings
LÖSUNG 29.04.2010, aktualisiert 20.04.2015
Zitat von mimuCH:
Anhand deiner obigen Angaben (und unter der Annahme das die Struktur einheitlich ist) habe ich den (for /f findstr)-Befehl aufgebaut.
Das war offensichtlich danebengeschossen. Deinem ersten Beispiel nach habe ich den Begriff hinter Sample Id und vor der offenen Klammer als Dateiname gewählt.
Das passt natürlich nicht wenn Sample ID nicht am Zeilenanfang steht und der Inhalt dahinter auch noch mit Leerzeichen unterbrochen ist.

Je nach Herkunft der PDF Datei müssen Texte auch nicht in der Datei in der Reihenfolge enthalten sein wie sie auf dem Papier erscheinen, was es dann ohne OCR unmöglich macht die Sample ID sauber zu extrahieren.

Ich habe den PDF in Text mit deinem Tool umgewandelt uns es sieht so aus:
...zahlen
12.998
Method name: Analysed: GC method: Sample ID:
Std-FAST 24.03.2010 18:02 Std-FAST GLN00146-011-F1 (# 38)
P e a k Numb e r # ---------------1 2 To t a l s
...weitere zahlen

Selbst wenn man mit besseren RegEx möglichkeiten z.Bsp. von Grep exakter den Text hinter Sample Id und vor dem "(" rauszieht wäre immer noch die Frage was von
Std-FAST 24.03.2010 18:02 Std-FAST GLN00146-011-F1 denn jetzt als Dateiname dienen soll?

Wie man sieht habe ich voreilig auf deinen Angaben eine Batch gebaut.
Ob es lohnt ohne präzisere Angaben von dir weitere Zeit zu investieren ist fraglich.

Gruß
LotPings
Bitte warten ..
Mitglied: mimuCH
29.04.2010 um 14:13 Uhr
hoi bastla

Ich habe bei der konvertierung noch -raw hinzugefügt und kann die ID auslesen, da beide jetzt auf der gleichen Zeile sind
PdfToText.exe -raw %1

Danach gab es:
Ren "20100209100805.pdf" "GLN00146-011-F1 .PDF"


Wie kann ich jetzt noch die Leerzeichen wegnehmen?

beste grüsse
mimu
Bitte warten ..
Mitglied: bastla
LÖSUNG 29.04.2010, aktualisiert 20.04.2015
Hallo mimuCH!

Wenn jetzt die entsprechende Zeile den anfangs beschriebenen Aufbau hat, sollte sich das Leerzeichen durch eine Anpassung der Schleifenparameter in der Zeile 10 auf
for /f "Tokens=3 delims=:( " %%B in ( 'findstr /I "Sample.ID" %2 ' ) Do Call :Trim SampleID %%B
eliminieren lassen (das Prinzip sollte ja inzwischen nachvollziehbar sein) ...

Grüße
bastla
Bitte warten ..
Mitglied: Pandamir
09.04.2014 um 17:18 Uhr
Moin,

ich eröffne mal an dieser Stelle da ich ein ähnliches Problem habe.
Ich möchte aus einem PDF eine Kundennummer auslesen und diese dann als Dateinamen verwenden.
Aufbau:
Kundennummer 123456KD123456
Ich hab versucht die obige Batch entsprechend abzuändern aber irgendwie klappt das nicht, da er keine Kundennummer findet.
Er wandelt allerdings die pdfs in txt um und hier steht die Kundennummer nicht mehr in der selben Zeile.
Zu der Kundennummer ist zu sagen, dass die Ziffern sowohl vor dem KD als auch danach variabel sein können. Das "KD" steht jedoch in jeder Kundennummer.

Kann mir hier jemand helfen?

Danke und VG
Panda
Bitte warten ..
Mitglied: bastla
09.04.2014, aktualisiert um 18:49 Uhr
Hallo Pandamir!

Wenn Du nicht nach "Sample.ID", sondern nach "KD" suchst, solltest Du zumindest schon die richtigen Zeilen erhalten - wie die Zerlegung dieser Zeilen erfolgen muss, kannst nur Du wissen; sollte allerdings in einer solchen Zeile tatsächlich nur
Kundennummer 123456KD123456
stehen, bräuchtest Du nur "tokens=2" (ohne "delims", da Leerzeichen und TAB Default-Trennzeichen sind) ...

Grüße
bastla
Bitte warten ..
Mitglied: LotPings
09.04.2014 um 19:03 Uhr
Hallo Panda,

eine PDF-Datei kann sehr unterschiedliche Informationen enthalten. Wenn sie nur Pixelinformationen enthält, ist da z.Bsp. kein Text der gefiltert werden könnte.
Deine Informationen lassen weder erkennen was du bisher genau gemaht hast - noch wie erfahren du im Umgang mit solchen Problemen bist.
Das obige ist kein Patentrezept sondern eine vor langer Zeit schrittweise erarbeitete Lösung für ein konkretes Problem.
Leider haben wir alle nicht immer Zeit und/oder Lust für ein solches Vorgehen das ja auch auf deinen Skills basieren muss.

Gruß LotPings
Bitte warten ..
Mitglied: Pandamir
10.04.2014 um 08:40 Uhr
Hallo und guten Morgen.

mit der oben genannten Batch und pdftotext kann ich die PDF-Datei in eine Textdatei umwandeln.
Diese Textdatei enthält auch auslesbaren Text und die benötigte Kundennummer ist auch im entsprechenden Format enthalten.
Meine Idee war jetzt einfach "Sample.ID" durch "Kundennummer" zu ersetzen.
Hier kommt jedoch die Fehlermeldung, dass keine Kundennummer gefunden werden konnte.
Suche ich jetzt wie von bastla (trotzdem danke für den Tip) nach "KD" stellt sich mir die Frage ob die Batch die "KD" casesensitive ausliest.
Sollte das nicht so sein, und "KD" wird auch als "kd" genutzt könnte es theoretisch passieren, dass ein Kundenname als Dateiname verarbeitet wird oder die Batch die Verarbeitung abbricht?

Danke und VG
Panda
Bitte warten ..
Mitglied: bastla
10.04.2014, aktualisiert um 09:15 Uhr
Hallo Pandamir!

Case-sensitive wird's, wenn Du bei "findstr" das "/I" weg lässt ...

Grüße
bastla
Bitte warten ..
Mitglied: Pandamir
10.04.2014 um 10:49 Uhr
Super. Das Script funktioniert. Leider habe ich noch das Problem wie bereits oben beschrieben, dass er zum Ende des Dateinamens ein Leerzeichen einfügt.
Bei dem von bastla eingestellten Änderung in Zeile 10:
for /f "Tokens=3 delims= " %%B in ( 'findstr /I "Sample.ID" %2 ' ) Do Call :Trim SampleID %%B

konnte ich nur die Änderung von Tokens=2 in Tokens=3 erkennen. Baue ich diese Änderung ein, wird die Kundennummer nicht mehr gefunden.
Gibt es eine Möglichkeit das Leerzeichen noch zu entfernen?
Wenn nicht, wär es auch nicht wild (wär "nur" das Sahnehäubchen).

Danke und VG
Panda
Bitte warten ..
Mitglied: bastla
10.04.2014 um 13:46 Uhr
Hallo Pandamir!

Versuch es mit folgender Zeile 17:
Set "%1=%2"
Grüße
bastla
Bitte warten ..
Mitglied: Pandamir
10.04.2014 um 14:10 Uhr
PERFEKT!!!
Danke.

VG
Panda
Bitte warten ..
Mitglied: Pandamir
10.04.2014 um 16:09 Uhr
Aaaaargh...
jetzt wirds tricky.
In der pdf sind Bankdaten enthalten bei deren BIC ggf. auch ein KD enthalten ist.
Resultat ist, dass der Dateiname dann "BIC" heisst.
Kann ich den Such-String so definieren, dass im Dokument nach 123456KD123456 (6xZiffer KD 6xZiffer) gesucht wird?

VG
Panda
Bitte warten ..
Mitglied: bastla
10.04.2014 um 16:21 Uhr
Hallo Pandamir!

Dein Suchstring wäre dann
findstr "[0-9][0-9][0-9][0-9][0-9][0-9]KD[0-9][0-9][0-9][0-9][0-9][0-9]"
Grüße
bastla
Bitte warten ..
Mitglied: Pandamir
11.04.2014, aktualisiert um 10:12 Uhr
Hallo Bastla,

Danke für deine Hilfe. Leider besteht das Problem noch immer.
Ich habe eine Vermutung wo mein Problem liegt.
Ich habe mir dei Textdatei mal dazu angesehen.
Die Auswertung erfolgt so wie ich das sehe zeilenweise. Der Token-Befehl gibt an welchen Wert er ausgeben soll.
Damit wird aber wenn ich richtig liege der "findstr" ausser Kraft gesetzt da ich ihm ja bereits mit Token sage welchen wert er mir ausgeben soll.
Ich benötige also eine Lösung die zwar Zeilenweise sucht, aber mir nur das ausgibt was bastla im "findstr" als Suchparameter übergibt.
Nämlich:
findstr "[0-9][0-9][0-9][0-9][0-9][0-9]KD[0-9][0-9][0-9][0-9][0-9][0-9]"

Die Kundennummer ist eindeutig und kommt auch nur einmal in dem gesamten Dokument vor.
Problematisch wird es ggf. dadurch, dass die Kundennummer in unterschiedlichen Zeilen in dem Textdokument stehen kann.
Anbei mal der aktuelle Quelltext:

01.
@Echo off 
02.
:: Batch benötigt pdftotext.exe aus diesem Paket (nicht auf Win x64 lauffähig) 
03.
:: ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.02pl4-win32.zip 
04.
For /f "Delims=" %%A in ('Dir /B /A-D ".\Rechnung*.pdf"') Do Call :ProcPDF "%%A" "%%~nA.txt" 
05.
Goto :Eof 
06.
 
07.
:ProcPDF 
08.
pdftotext.exe %1 
09.
If defined Kundennumer set "Kundennumer=" 
10.
for /f "Tokens=2" %%B in ( 'findstr "[0-9][0-9][0-9][0-9][0-9][0-9]KD[0-9][0-9][0-9][0-9][0-9][0-9]" %2 ' ) Do Call :Trim Kundennumer %%B 
11.
If Not Defined Kundennumer Echo Keine Kundennumer in %1 & goto :EOF 
12.
Echo Ren %1 "%Kundennumer%.pdf" 
13.
Del %2 /Q 2>NUL 
14.
Goto :Eof  
15.
 
16.
:Trim  
17.
Set "%1=%2"  
18.
Goto :Eof
Ich hoffe dafür gibt es eine Lösung.

Danke für eure Unterstützung.

VG
Panda
Bitte warten ..
Mitglied: bastla
11.04.2014 um 14:33 Uhr
Hallo Pandamir!
Damit wird aber wenn ich richtig liege der "findstr" ausser Kraft gesetzt da ich ihm ja bereits mit Token sage welchen wert er mir ausgeben soll.
Damit liegst Du nicht richtig - zunächst wird "findstr" ausgeführt und liefert eine oder mehrere passende Zeilen (und zwar immer die gesamten Zeilen) und dann erst werden diese durch die Schleife nacheinander abgearbeitet und anhand der Angaben für "tokens" und (ggf "delims") zerlegt. In %%B erhältst Du daher das, was in der jeweiligen Zeile als 2. Token (also zwischen erstem und zweitem Leerzeichen) steht.

Lass den Batch mal mit "echo on" laufen und schau Dir den Ablauf an.

Hilfreich für die Fehlersuche wäre es, wenn Du die relevanten Zeilen einer (anonymisierten) Beispiel-Textdatei (als "Code" formatiert) posten könntest.

Vereinfachen ließe sich Dein Code aber jedenfalls schon mal etwa so:
01.
@Echo off & setlocal 
02.
For /f "Delims=" %%A in ('Dir /B /A-D "Rechnung*.pdf"') Do Call :ProcPDF "%%A" "%%~nA.txt" 
03.
Goto :Eof 
04.
 
05.
:ProcPDF 
06.
pdftotext.exe %1 
07.
set "KNr=" 
08.
for /f "Tokens=2" %%B in ( 'findstr "[0-9][0-9][0-9][0-9][0-9][0-9]KD[0-9][0-9][0-9][0-9][0-9][0-9]" %2 ' ) Do set "KNr=%%B" 
09.
If Not Defined KNr Echo Keine Kundennummer in %1 & goto :EOF 
10.
Echo Ren %1 "%KNr%.pdf" 
11.
Del %2 /Q 2>NUL 
12.
Goto :Eof 
Grüße
bastla
Bitte warten ..
Mitglied: Pandamir
11.04.2014, aktualisiert um 15:35 Uhr
Hallo Bastla,

danke für deine Aufklärungsarbeit.
Mein Problem ist, dass die benötigte Kundennummer in der Zeile an unterschiedlichen Stellen liegen kann,
da in der Zeile auch Namen und Vornamen und ggf. 2. und 3 Personen jeweils mit Namen und Vornamen stehen.
Ich benötige also einen Bereich in der Zeile.
Nach einem Test mit Token wird mir jeweils bei Tokens=1 der erste Token bei Tokens=2 der 2. Token usw. ausgegeben.
Diese stimmen jedoch nicht mit dem String überein.
Ich bin eig. davon ausgegangen dass Die Definition des String nach findstr explizit nach der Zeichenfolge in der Zeile sucht.
Die BIC stimmt jedoch nicht mit dem Suchstring überein (Dateiname lautet "BIC.pdf" sollte aber 123456KD123456.pdf lauten).

VG
Panda
Bitte warten ..
Mitglied: bastla
11.04.2014 um 16:02 Uhr
Hallo Pandamir!

Wenn auf jeden Fall "Kundennummer" in der gleichen Zeile und unmittelbar vor der gesuchten Nummer steht, dann vielleicht so:
01.
@Echo off & setlocal 
02.
For /f "Delims=" %%A in ('Dir /B /A-D "Rechnung*.pdf"') Do Call :ProcPDF "%%A" "%%~nA.txt" 
03.
Goto :Eof 
04.
 
05.
:ProcPDF 
06.
pdftotext.exe %1 
07.
set "Zeile=" 
08.
for /f "delims=" %%B in ( 'findstr "[0-9][0-9][0-9][0-9][0-9][0-9]KD[0-9][0-9][0-9][0-9][0-9][0-9]" %2 ' ) Do set "Zeile=%%B" 
09.
If Not Defined Zeile Echo Keine Kundennummer in %1 & goto :EOF 
10.
set "KNr=" 
11.
for /f "tokens=1" %%B in ("%Zeile:*Kundennummer=%") do set "KNr=%%B" 
12.
If Not Defined KNr Echo Keine Kundennummer in %1 & goto :EOF 
13.
Echo Ren %1 "%KNr%.pdf" 
14.
Del %2 /Q 2>NUL 
15.
Goto :Eof 
Damit wird zunächst alles vom Zeilenanfang bis inklusive "Kundennummer" durch "nichts" ersetzt, wodurch die gesuchte Nummer dann eigentlich Token 1 sein müsste ...

Grüße
bastla
Bitte warten ..
Mitglied: Pandamir
16.04.2014 um 14:36 Uhr
Hallo bastla,

sorry für meine späte Antwort.
Leider ist dem nicht so, dass in jeder Textdatei das Wort Kundenummer vor der Kundennummer steht.
Das einzige Merkmal was die Kundennummer identifizieren kann ist das Schema "[0-9][0-9][0-9][0-9][0-9][0-9]KD[0-9][0-9][0-9][0-9][0-9][0-9]"
da dieses wirklich nur einmal vorkommt.
Was auf jeden Fall (zumindest in den Textdateien die ich bisher gesehen habe) vorkommt, ist die Zeichenfolge "[0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]".

VG
Panda
Bitte warten ..
Mitglied: madgeek
07.04.2015, aktualisiert um 17:04 Uhr
01.
@Echo off 
02.
:: Batch benötigt pdftptext.exe aus diesem Paket (nicht auf Win x64 lauffähig) 
03.
:: ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.02pl4-win32.zip 
04.
For /f "Delims=" %%A in ('Dir /B /A-D ".\20*.pdf"') Do Call :ProcPDF "%%A" 
05.
"%%~nA.txt" 
06.
Goto :Eof 
07.
 
08.
:ProcPDF 
09.
PdfToTxt.exe %1 
10.
If defined SampleID set "SampleID=" 
11.
for /f "Tokens=2 delims=:(" %%B in ( 'findstr /I "Sample.ID" %2 ' ) Do Call :Trim SampleID %%B 
12.
If Not Defined SampleID Echo Keine SampleID in %1 & goto :EOF 
13.
Echo Ren %1 "%SampleID%.PDF" 
14.
Del %2 /Q 2>NUL 
15.
Goto :Eof  
16.
 
17.
:Trim  
18.
Set %1=%2  
19.
Goto :Eof

Hallo zusammen

Ich könnte diesen Script auch super verwenden, allerdings sollte einfach die erste Zeile in der TXT-Datei verwendet werden, um die Datei umzubenennen (also suchen im Text nicht notwendig).

Kann mir jemand helfen?

Vielen Dank und liebe Grüsse
MadGeek
Bitte warten ..
Mitglied: bastla
09.04.2015 um 14:19 Uhr
Hallo madgeek!

Den Inhalt der ersten Zeile bekommst du einfach mit
set /p SampleID=<%1
in die Variable %SampleID% ...

Grüße
bastla
Bitte warten ..
Mitglied: madgeek
10.04.2015 um 11:03 Uhr
Vielen Dank bastla!

Das war's genau.

Beste Grüsse
MadGeek
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst 1 PDF duplizieren und umbenennen nach CSV mittels Batch (5)

Frage von Kalisser zum Thema Batch & Shell ...

Batch & Shell
2 String aus PDF auslesen und diesen zum Umbenamsen benutzen (8)

Frage von ingo101 zum Thema Batch & Shell ...

Batch & Shell
gelöst Mehrere PDF-Dateien per Batch zusammenfügen (1)

Frage von Grimmli zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...