Mehrere GZ Dateien entpacken, umbennen und modifizieren
Einmal im Monat kommen mehrere GZ-Dateien per E-Mail, die für den Import nach Access vorbereitet werden müssen.
Teil 1)
Am Monatsanfang kommen mehrere GZ-Dateien im folgenden Format rein: Bereich_Monat-Jahr.gz
Darin enhalten ist jeweils eine Datei mit einem zufälligen Dateinamen: JJDFB_6357851.xls
Ziel ist es Datein zu erhalten, die folgenden Dateinamen haben: Bereich.txt
(Einfaches Umbennen reicht, es handelt sich nicht um echte xls-Dateien)
Teil 2)
Die Dateien enthalten am Anfang eine variable Zeilenanzahl Daten, die ich in Access nicht benötige, d.h. gelöscht werden sollten.
Die erste Zeile, die erhalten bleiben soll, beginnt stets mit "Logistikebene class_part".
Am besten bearbeitet die Batchdatei einfach alle GZ-Dateien im selben Verzeichnis (feste Pfadangaben wären hinderlich).
Ich schätze das ist sehr viel Anforderung auf einmal, zudem ich noch nie mit Batchprogrammierung zu tun hatte.
Aber ich bin wahnsinnig dankbar für jede Unterstützung!
Grüße,
Marie
Teil 1)
Am Monatsanfang kommen mehrere GZ-Dateien im folgenden Format rein: Bereich_Monat-Jahr.gz
Darin enhalten ist jeweils eine Datei mit einem zufälligen Dateinamen: JJDFB_6357851.xls
Ziel ist es Datein zu erhalten, die folgenden Dateinamen haben: Bereich.txt
(Einfaches Umbennen reicht, es handelt sich nicht um echte xls-Dateien)
Teil 2)
Die Dateien enthalten am Anfang eine variable Zeilenanzahl Daten, die ich in Access nicht benötige, d.h. gelöscht werden sollten.
Die erste Zeile, die erhalten bleiben soll, beginnt stets mit "Logistikebene class_part".
Am besten bearbeitet die Batchdatei einfach alle GZ-Dateien im selben Verzeichnis (feste Pfadangaben wären hinderlich).
Ich schätze das ist sehr viel Anforderung auf einmal, zudem ich noch nie mit Batchprogrammierung zu tun hatte.
Aber ich bin wahnsinnig dankbar für jede Unterstützung!
Grüße,
Marie
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 21.04.2010 um 15:55:47 Uhr
Mehrere GZ Dateien entpacken, umbennen und modifizieren
Set /a rgc+=1659
Einfaches Umbennen reicht...
Jepp, hätte mir auch gereicht...Set /a rgc+=1
660
Content-ID: 141155
Url: https://administrator.de/forum/mehrere-gz-dateien-entpacken-umbennen-und-modifizieren-141155.html
Ausgedruckt am: 11.04.2025 um 18:04 Uhr
4 Kommentare
Neuester Kommentar
Hallo Marie,
1. mit dem Programm 7-zip kannst Du die Datei entpacken
2. die Datei umbenennen
3. mit dem Befehl find kannst Du filtern, allerdings Zeilen mit einem bestimmten Inhalt übernehmen oder nicht.
so ähnlich kann es werden.
Probieren, probieren ...
vG
LS
1. mit dem Programm 7-zip kannst Du die Datei entpacken
2. die Datei umbenennen
3. mit dem Befehl find kannst Du filtern, allerdings Zeilen mit einem bestimmten Inhalt übernehmen oder nicht.
7z e Bereich_Monat-Jahr.gz
ren *.xls bereich.txt
find "Text in zu uebernehmende Zeilen" bereich.txt > bereich.dat
so ähnlich kann es werden.
Probieren, probieren ...
vG
LS
Moin Marie-K,
willkommen im Forum.
zu dem 2. Schritt, zum "Überlesen" der ersten nicht benötigten Zeilen wäre eine der möglichen Strategien
die Zeilennummer des Suchtextes zu ermitteln. [Bitte am CMD-Prompt mit einer der Textdateien testen.]
Du bekommst sicherlich ein wenig mehr Sicherheit beim Batchen, wenn du mal kurz am CMD-Prompt bei FOR /?, SET /?, FINDSTR /? und MORE/? recherchierst.
Oder hier im Bereich "Batch & Shell" sollte auch einiges zu finden sein zu "FindStr " oder "Zeilen überspringen Batch".
Wenn du steckenbleibst, helfen wir auch gerne weiter. Aber versuche es mal bitte - ist ein überschaubarer Umfang.
Grüße
Biber
willkommen im Forum.
zu dem 2. Schritt, zum "Überlesen" der ersten nicht benötigten Zeilen wäre eine der möglichen Strategien
- innerhalb der oberen FOR-Anweisung oder auch nach kompletter Abarbeitung der ersten FOR-Anweisung danach in einer neuen FOR ..In (*.txt)-Anweisung
- jeweils mit
{Find /n oder } Findstr /n "Logistikebene class_part" "%%~nxi"
die Zeilennummer des Suchtextes zu ermitteln. [Bitte am CMD-Prompt mit einer der Textdateien testen.]
- Diese Zeilennummer in einer Variablen zu merken und diese Variable als "Skip"-Parameter für den Befehl MORE zu benutzen.
- und somit mit "more +n dieTextdatei.txt > dieTextDatei.csv" zu erzeugen, die dann Access verarbeiten kann.
Du bekommst sicherlich ein wenig mehr Sicherheit beim Batchen, wenn du mal kurz am CMD-Prompt bei FOR /?, SET /?, FINDSTR /? und MORE/? recherchierst.
Oder hier im Bereich "Batch & Shell" sollte auch einiges zu finden sein zu "FindStr " oder "Zeilen überspringen Batch".
Wenn du steckenbleibst, helfen wir auch gerne weiter. Aber versuche es mal bitte - ist ein überschaubarer Umfang.
Grüße
Biber

Moin moin,
Ich kann mich Bibers Ratschlägen nur anschließen.
Der Übersicht halber würde ich die Dateien in (ggfs temporäre) Unterverseichnisse entpacken.
Das sähe dann z.Bsp. so aus:
EinTest hier Anhand deiner Angaben funktionierte soweit.
Gruß
LotPings
Ich kann mich Bibers Ratschlägen nur anschließen.
Der Übersicht halber würde ich die Dateien in (ggfs temporäre) Unterverseichnisse entpacken.
Das sähe dann z.Bsp. so aus:
@Echo off
For /f "delims=" %%A in ('dir /B/A-D *.gz') do Call :Process "%%A" "%%~nA"
Echo Done
goto :Eof
:Process
:: Name splitten
Set "Archiv=%~2"
Set "Monat=%Archiv:*_=%"
Call Set "Bereich=%%Archiv:_%Monat%=%%"
Echo Dateiname: %~1
Echo Archiv : %Archiv%
Echo Bereich : %Bereich%
Echo Monat : %Monat%
:: Entpacke in Unterordner
If Not Exist %Archiv% MD %Archiv%
7z e -o%Archiv% %1 *.xls
:: verarbeite *.XLS
For /F "Delims=" %%B in ('Dir /B/A-D .\%Archiv%\*.xls') Do Call :ProcXLS "%%~fB"
:: Hier ggfs aufräumen: Unterordner löschen
goto :Eof
:ProcXLS
:: Ermittle Anfangszeile
for /f "delims=" %%C in (
'find /I /N "Logistikebene class_part" ^<%1'
) Do Set /A "Offset=%%C-1"
:: Gebe aus in neue Datei
More +%Offset% <%1 >"%Bereich%.txt"
Gruß
LotPings