Durch Scanner erstellte .txt aufsplitten mit Batchdatei
Hallo,
ich habe einen Scanner eingerichtet, der eine Textdatei mit folgendem Inhalt auswirft:
116934;10052009;1720.TXT
116934;3033968;;20;;;;;;;;;
116934;2843021;;1;;;;;;;;;
105206;2658390;;100;;;;;;;;;
105206;4930004;;10;;;;;;;;;
106228;4981043;;5;;;;;;;;;
106228;2740105;;500;;;;;;;;;
Das erste ist die Kundennummer, das zweite die Artikelnummer und das letzte die Anzahl. Diese TXT-Datei soll jetzt aufgeteilt werden in drei Stück jeweil nachdem sich die Kundennummer ändert:
116934;10052009;1720.TXT
116934;3033968;;20;;;;;;;;;
116934;2843021;;1;;;;;;;;;
und dann halt die nächste.
Jetzt bräuchte ich eine Batch-Datei die mir das abnimmt, da es hoher aufwand ist alles einzeln einzuscannen und abzuspeichern.
Besten dank im vorraus für die Antworten
Gruß
ich habe einen Scanner eingerichtet, der eine Textdatei mit folgendem Inhalt auswirft:
116934;10052009;1720.TXT
116934;3033968;;20;;;;;;;;;
116934;2843021;;1;;;;;;;;;
105206;2658390;;100;;;;;;;;;
105206;4930004;;10;;;;;;;;;
106228;4981043;;5;;;;;;;;;
106228;2740105;;500;;;;;;;;;
Das erste ist die Kundennummer, das zweite die Artikelnummer und das letzte die Anzahl. Diese TXT-Datei soll jetzt aufgeteilt werden in drei Stück jeweil nachdem sich die Kundennummer ändert:
116934;10052009;1720.TXT
116934;3033968;;20;;;;;;;;;
116934;2843021;;1;;;;;;;;;
und dann halt die nächste.
Jetzt bräuchte ich eine Batch-Datei die mir das abnimmt, da es hoher aufwand ist alles einzeln einzuscannen und abzuspeichern.
Besten dank im vorraus für die Antworten
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 122578
Url: https://administrator.de/forum/durch-scanner-erstellte-txt-aufsplitten-mit-batchdatei-122578.html
Ausgedruckt am: 15.05.2025 um 07:05 Uhr
14 Kommentare
Neuester Kommentar
Hallo Sp3ll3 und willkommen im Forum!
Dein gewünschtes Ergebnis sind 3 Dateien mit folgenden Inhalten?
Datei1:
Datei2:
Datei3:
Wenn ja: Wie sollen diese Dateien heißen?
Grüße
bastla
Dein gewünschtes Ergebnis sind 3 Dateien mit folgenden Inhalten?
Datei1:
116934;10052009;1720.TXT
116934;3033968;;20;;;;;;;;;
116934;2843021;;1;;;;;;;;;
105206;2658390;;100;;;;;;;;;
105206;4930004;;10;;;;;;;;;
106228;4981043;;5;;;;;;;;;
106228;2740105;;500;;;;;;;;;
Wenn ja: Wie sollen diese Dateien heißen?
Grüße
bastla
Versuchs mal damit:
Wenn du das REM entfernst wird die ursprungsdatei gelöscht, sonst nru umbeenannt mit einem tmp als Anhang.
@echo off
set "pfad=C:\Ordner"
FOR /F "tokens=1,* delims=;" %%i in ('dir /b "%pfad%\*.txt"') do (
ren "%pfad%\%%i;%%j" "%%i;%%j.tmp"
FOR /F "tokens=1,* delims=;" %%l in ('type "%pfad%\%%i;%%j.tmp"') do echo %%l;%%m>>"%pfad%\%%l;%%j"
REM del "%pfad%\%%i;%%j.tmp"
)
Hallo Sp3ll3!
Wenn die Ausgangsdatei "116934;10052009;1720.TXT" heißt und sich aufgrund der ersten Kundennummer ebenfalls der Dateiname "116934;10052009;1720.TXT" (beides tatsächlich mit enthaltenen ";" ?) ergibt, müssten die Teildateien in einen anderen Ordner geschrieben werden, oder soll die Ausgangsdatei um die nicht zugehörigen Zeilen gekürzt werden?
Falls Letzteres, dann etwa so:
Aufzurufen ist der Batch mit Übergabe der Ausgangsdatei, also etwa:
Bei Bedarf lässt sich das natürlich auf Bearbeitung aller (".TXT"- ) Dateien im Ordner erweitern ...
Grüße
bastla
Wenn die Ausgangsdatei "116934;10052009;1720.TXT" heißt und sich aufgrund der ersten Kundennummer ebenfalls der Dateiname "116934;10052009;1720.TXT" (beides tatsächlich mit enthaltenen ";" ?) ergibt, müssten die Teildateien in einen anderen Ordner geschrieben werden, oder soll die Ausgangsdatei um die nicht zugehörigen Zeilen gekürzt werden?
Falls Letzteres, dann etwa so:
@echo off & setlocal
set "AusgangsDatei=%~1"
set "Zielordner=%~dp1"
set "Bak=.bak"
for /f "tokens=1* delims=;" %%i in ("%~nx1") do set "Timestamp=%%j"
move "%AusgangsDatei%" "%AusgangsDatei%%Bak%"
set "Zuletzt=$"
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%AusgangsDatei%%Bak%"') do set "Zeile=%%j" & call :ProcessLine
del "%AusgangsDatei%%Bak%"
goto :eof
:ProcessLine
for /f "delims=;" %%a in ("%Zeile%") do set "KNr=%%a"
if "%KNr%"=="%Zuletzt%" goto :WriteLine
set "Zuletzt=%KNr%"
set "Datei=%Zielordner%%KNr%;%Timestamp%"
:WriteLine
>>"%Datei%" echo\%Zeile%
goto :eof
Aufteilen.cmd "D:\Ein Ordner\116934;10052009;1720.TXT"
Grüße
bastla
Hallo Sp3ll3!
Zeile 3 (zu beachten ist der abschließende "\"):
Außerdem wird angenommen, dass der Zielordner bereits existiert, ansonsten noch (jedenfalls vor Zeile 9) einfügen:
Aufruf des Batches:
Grüße
bastla
Zeile 3 (zu beachten ist der abschließende "\"):
set "Zielordner=D:\TXT Splitter\Ablage\"
if not exist "%Zielordner%" md "%Zielordner%"
Aufteilen.cmd "D:\TXT Splitter\116934;10052009;1720.TXT"
bastla
... Nachtrag: Wenn die Einzeldateien in einem anderen Ordner erstellt werden, ist das Umbenennen (und Löschen) der Ausgangsdatei nicht erforderlich, daher:
In dieser Fassung wird der Zielordner automatisch als Unterordner "Ablage" des Ordners, in welchem die Ausgangsdatei liegt, erstellt und verwendet.
Grüße
bastla
@echo off & setlocal
set "AusgangsDatei=%~1"
set "Zielordner=%~dp1Ablage\"
if not exist "%Zielordner%" md "%Zielordner%"
for /f "tokens=1* delims=;" %%i in ("%~nx1") do set "Timestamp=%%j"
set "Zuletzt=$"
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%AusgangsDatei%"') do set "Zeile=%%j" & call :ProcessLine
goto :eof
:ProcessLine
for /f "delims=;" %%a in ("%Zeile%") do set "KNr=%%a"
if "%KNr%"=="%Zuletzt%" goto :WriteLine
set "Zuletzt=%KNr%"
set "Datei=%Zielordner%%KNr%;%Timestamp%"
:WriteLine
>>"%Datei%" echo\%Zeile%
goto :eof
Grüße
bastla
Hallo Sp3ll3!
Kann ich nicht nachvollziehen - könntest Du kurz beschreiben, wie Du getestet hast?
Bei mir funktioniert jedenfalls die (aus dem per "Quelltext" aufgerufenen Fenster kopierte) gepostete Version mit folgender Quelldatei "116934;10052009;1720.TXT":
Kannst Du das bitte mit der gleichen Vorgangsweise (den gleichen Daten) bei Dir prüfen?
Grüße
bastla
Kann ich nicht nachvollziehen - könntest Du kurz beschreiben, wie Du getestet hast?
Bei mir funktioniert jedenfalls die (aus dem per "Quelltext" aufgerufenen Fenster kopierte) gepostete Version mit folgender Quelldatei "116934;10052009;1720.TXT":
116934;10052009;1720.TXT
116934;3033968;;20;;;;;;;;;
116934;2843021;;1;;;;;;;;;
105206;2658390;;100;;;;;;;;;
105206;4930004;;10;;;;;;;;;
106228;4981043;;5;;;;;;;;;
106228;2740105;;500;;;;;;;;;
Grüße
bastla