s.lamers
Goto Top

PDF umbenennen, Namen aus TXT an variabler Stelle auslessen sowie Ordnerstruktur aus altem Dateinamen

Hallo zusammen,

ich habe folgendes Problem, ich habe einen Ordner mit ca. 6000 PDF's + 6000 TXT Dateien. Es sind eingescannt Faxe, welche von einem OCR-Programm in durchsuchbare PDF Dateien konvertiert wurden. Außerdem wurde der komplette Inhalt der PDF's unter gleichem Dateinamen noch mal als TXT Datei abgespeichert. Es kommen ca. 150 Dateien täglich dazu.

Jetzt steht in einer der ersten 3 Zeilen der Dateiname in der TXT Datei immer hinter dem Wort "liste" und ist immer 8 Zeichen lang. Teilweise kommt es aber auch noch vor, das eine liste über mehrere Seiten geht, weshalb der Dateinamen dann erweitert werden müsste mit einer fortlaufenden Nummer. Für den Fall das das Wort liste nicht gefunden wird ist es was manuelles, weshalb auch diese erkennbar sein sollten.

Zur Veranschaulichung mal ein kleines Beispiel:

Dateien sind gespeichert nach dem Muster:
C:\Eingang\21.04.2014_0001.pdf
C:\Eingang\21.04.2014_0001.txt
C:\Eingang\21.04.2014_0002.pdf
C:\Eingang\21.04.2014_0002.txt
C:\Eingang\21.04.2014_0003.pdf
C:\Eingang\21.04.2014_0003.txt
C:\Eingang\21.04.2014_0004.pdf
C:\Eingang\21.04.2014_0004.txt

Ergebniss sollte in etwa so ausschauen:
C:\Sortiert\2014\04\21\11111111_1-2.pdf (liste 1 von 2 Seiten)
C:\Sortiert\2014\04\21\11111111_2-2.pdf (liste 2 von 2 Seiten)
C:\Sortiert\2014\04\21\22222222.pdf (liste 1 Seite lang)
C:\Sortiert\2014\04\21\manuell_1-1.pdf (Sort liste nicht gefunden)

Die TXT Dateien können nach dem sortieren gelöscht werden.

Ist so etwas überhaupt lösbar über eine Batchdatei? Gibt es jemanden, der mir hierbei helfen kann?

Vielen Dank.

Gruß

Content-Key: 236082

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

Printed on: April 25, 2024 at 14:04 o'clock

Member: Xaero1982
Solution Xaero1982 Apr 21, 2014 updated at 20:12:55 (UTC)
Goto Top
Tach,

noch nicht ganz klar:

C:\Sortiert\2014\04\21\11111111_1-2.pdf (liste 1 von 2 Seiten)
C:\Sortiert\2014\04\21\11111111_2-2.pdf (liste 2 von 2 Seiten)

Es gibt doch aber nur eine PDF oder? Zumindest ausgehend von deinem Muster.

Und ich denke schon, dass das lösbar ist. Da wird der Bastla oder so sicher was haben.

Gruß
Member: s.lamers
s.lamers Apr 21, 2014 at 12:39:39 (UTC)
Goto Top
Moin,

noch einmal zur Verdeutlichung.

das Muster:
C:\Eingang\21.04.2014_0001.pdf (Entspricht der 1sten Seite des Faxes und ist liste 11111111 und davon die Seite 1)
C:\Eingang\21.04.2014_0001.txt
C:\Eingang\21.04.2014_0002.pdf (Entspricht der 2ten Seite des Faxes und ist liste 11111111 und davon die Seite 2)
C:\Eingang\21.04.2014_0002.txt
C:\Eingang\21.04.2014_0003.pdf (Entspricht der 3ten Seite des Faxes und wäre jetzt liste 22222222 mit nur 1ner Seite)
C:\Eingang\21.04.2014_0003.txt
C:\Eingang\21.04.2014_0004.pdf (Entspricht der 4ten Seite des Faxes und enthält das Wort liste nicht, ist somit etwas manuelles und davon die 1te Seite)
C:\Eingang\21.04.2014_0004.txt

da das alles Faxe sind, welche eingescannt wurden, sind die zusammenhängende Listen nicht mehr in einer Datei zusammen. Und es kommt leider vereinzelt vor, das einige dieser listen 2-3 Seiten lang sind. Haben aber in diesem Fall auch die selbe Kopfzeile, nur das sich dann die Listennummer wiederholen würden, weshalb der Gedanke _1-2, _2-2 dranzuhängen kommt. Es könnte ja aber auch durchaus mal vorkommen, das das OCR Programm eine Nummer falsch erkennt (statt einer 6 eine 8) und wenn dann diese Nummer doppelt erkannt werden sollte, möchte ich vermeiden, das eine der Dateien überschrieben wird.

In der TXT Datei steht dann teilweise in der 1 - 2 Zeile etwas was manuell raufgekritzelt wurde, und dann in der 3ten Zeile kommt nach einem variabel langen Text das Wort liste und danach die 8 Zahlen welche der Dateiname werden sollten. Ist aber nichts dazugeschrieben worden, steht diese Zahl auch schon mal in Zeile 1. Das Wort liste wiederholt sich noch einmal in der letzten Zeile jeder Datei, und gibt dort Preis von wo aus sie verschickt worden ist. (5 stellige Nummer davor sowie einige Zeichen hinter dem Wort)

Gruß
Member: bastla
Solution bastla Apr 21, 2014 updated at 20:12:47 (UTC)
Goto Top
Hallo s.lamers und willkommen im Forum!

Oberflächlich getestet etwa so:
@echo off & setlocal
Set "Ein=C:\Eingang"  
set "Aus=C:\Sortiert"  
set "Such=liste"  
set /a ZeilenAnzahl=3
set "Typ=pdf"  
set /a Stellen=2

for %%i in ("%Ein%\*.txt") do call :ProcessFile "%%i"  
goto :eof

:ProcessFile
for /f "tokens=1-3 delims=._" %%a in ("%~n1") do set "Tag=%%a" & set "Monat=%%b" & set "Jahr=%%c"  
set "Ziel=%Aus%\%Jahr%\%Monat%\%Tag%"  
md "%Ziel%" 2>nul  

set "Zeile=" & set "Name=manuell"  
for /f "tokens=1* delims=:" %%a in ('findstr /ni "%Such%" %1') do if %%a leq %ZeilenAnzahl% set "Zeile=%%b"  
if not defined Zeile goto :Check
call set "Zeile=%%Zeile:*%Such%=%%"  
for /f %%a in ("%Zeile%") do set "Name=%%a"  
set "Name=%Name:~,8%"  

:Check
set /a Nr=1000001
set "Dateiname=%Name%.%Typ%"  
:Loop
if not exist "%Ziel%\%Dateiname%" copy %1 "%Ziel%\%Dateiname%">nul & goto :eof  
set /a Nr+=1
call set "Dateiname=%Name%_%%Nr:~-%Stellen%%%.%Typ%"  
goto :Loop
Da Du die Inhalte der Zeilen mit "liste" nicht näher beschrieben hast, gehe ich davon aus, dass zwischen "liste" und dem 8-stelligen Dateinamen allenfalls eine unbestimmte Anzahl von Leerzeichen, aber kein anderer Text stehen kann.

In den Zeilen 4 und 5 kannst Du den Suchbegriff und die Anzahl der Zeilen ab Dateianfang, in denen dieser Begriff gesucht werden soll, festlegen - lt Deiner Vorgabe sind das "suche" und 3 Zeilen.

Eine Einschränkung gibt es hinsichtlich der Benennung von mehrseitigen Listen: Es wird erst ab der zweiten Seite eine 2-stellige (die Stellenanzahl kannst Du in Zeile 7 mit max 6 festlegen) Seitennummer (ohne Gesamtzahl der Seiten - diese steht ja meines Wissens nicht in der ersten Datei und ist damit vorweg nicht bekannt) hinzugefügt, sodass das Ergebnis für die ersten beiden Dateien Deines Beispiels (mit 2-stelliger Seitennummer) so aussieht:
C:\Sortiert\2014\04\21\11111111.pdf
C:\Sortiert\2014\04\21\11111111_02.pdf
Auch für Dateien, in denen "liste" nicht gefunden wurde, wird bei Bedarf eine 2-stellige Laufnummer hinzugefügt, sodass also zB
C:\Sortiert\2014\04\21\manuell.pdf
C:\Sortiert\2014\04\21\manuell_02.pdf
C:\Sortiert\2014\04\21\manuell_03.pdf
entstünden.

Grüße
bastla
Member: s.lamers
s.lamers Apr 21, 2014 at 20:26:39 (UTC)
Goto Top
Guten Abend bastla,

vielen Dank für das Script ;) Habe eine Kleinigkeit geändert, da mir hier die TXT Dateien kopiert wurden und nicht die PDF's.

Zeile 28:
if not exist "%Ziel%\%Dateiname%" copy"%~n1.%Typ%" "%Ziel%\%Dateiname%">nul & goto :eof

Ansonsten ist es genau das was ich gesucht habe :D

Danke, und einen schönen Abend noch.

Gruß
s.lamers
Member: bastla
bastla Apr 21, 2014 at 21:44:44 (UTC)
Goto Top
Hallo s.lamers!

Oberflächlich getestet war leider genau die richtige Beschreibung ... face-sad

Freut mich, dass Du's hinbekommen hast.

Grüße
bastla
Member: s.lamers
s.lamers Apr 22, 2014 at 14:26:40 (UTC)
Goto Top
Hallo bastla,

mit dieser Vorlage ;) Alleine hätte ich das allerdings niemals geschafft.

Danke

Gruß

s.lamers