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

Durch Scanner erstellte .txt aufsplitten mit Batchdatei

Frage Entwicklung Batch & Shell

Mitglied: Sp3ll3

Sp3ll3 (Level 1) - Jetzt verbinden

12.08.2009, aktualisiert 12:27 Uhr, 3311 Aufrufe, 14 Kommentare

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ß
Mitglied: bastla
12.08.2009 um 12:43 Uhr
Hallo Sp3ll3 und willkommen im Forum!

Dein gewünschtes Ergebnis sind 3 Dateien mit folgenden Inhalten?
Datei1:
116934;10052009;1720.TXT 
 
116934;3033968;;20;;;;;;;;; 
116934;2843021;;1;;;;;;;;;
Datei2:
105206;2658390;;100;;;;;;;;; 
105206;4930004;;10;;;;;;;;;
Datei3:
106228;4981043;;5;;;;;;;;; 
106228;2740105;;500;;;;;;;;;
Wenn ja: Wie sollen diese Dateien heißen?

Grüße
bastla
Bitte warten ..
Mitglied: Sp3ll3
12.08.2009 um 13:08 Uhr
ja, das ist richtig.

der Name setzt sich wie folgt zusammen:

Kundennummer;Datum(ttmmjjjj);Uhrzeit(minminstdstd)

Danke für das willkommen heißen und die schnelle antwort.
Bitte warten ..
Mitglied: bastla
12.08.2009 um 13:18 Uhr
Hallo Sp3ll3!

Gemeint war eigentlich, unter welchem Namen die jeweiilige Teildatei gespeichert werden soll ...

Zusatzfrage: Wie ist bei Namenskollisionen vorzugehen (wenn also eine gleichnamige Datei bereits existieren sollte)?

Grüße
bastla
Bitte warten ..
Mitglied: Sp3ll3
12.08.2009 um 13:25 Uhr
Also die Teildatei soll das gleiche Namenformat tragen mit angepasster Kundennummer sprich:

116934;10052009;1720.TXT

105206;10052009;1721.TXT

usw..

Da jeder Kunde nur maximal einmal vorkommen kann (da die erzeugten TXT-Dateien nach Verarbeitung gelöscht werden) ist eine Namenskollision ausgeschlossen. Muss also nicht Berücksichtigt werden.

Gruß
Bitte warten ..
Mitglied: miniversum
12.08.2009 um 13:51 Uhr
Versuchs mal damit:
01.
@echo off 
02.
set "pfad=C:\Ordner" 
03.
 
04.
FOR /F "tokens=1,* delims=;" %%i in ('dir /b "%pfad%\*.txt"') do ( 
05.
ren "%pfad%\%%i;%%j" "%%i;%%j.tmp" 
06.
FOR /F "tokens=1,* delims=;" %%l in ('type "%pfad%\%%i;%%j.tmp"') do echo %%l;%%m>>"%pfad%\%%l;%%j" 
07.
REM del "%pfad%\%%i;%%j.tmp" 
08.
)
Wenn du das REM entfernst wird die ursprungsdatei gelöscht, sonst nru umbeenannt mit einem tmp als Anhang.
Bitte warten ..
Mitglied: bastla
12.08.2009 um 13:53 Uhr
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:
01.
@echo off & setlocal 
02.
set "AusgangsDatei=%~1" 
03.
set "Zielordner=%~dp1" 
04.
set "Bak=.bak" 
05.
for /f "tokens=1* delims=;" %%i in ("%~nx1") do set "Timestamp=%%j" 
06.
 
07.
move "%AusgangsDatei%" "%AusgangsDatei%%Bak%" 
08.
set "Zuletzt=$" 
09.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%AusgangsDatei%%Bak%"') do set "Zeile=%%j" & call :ProcessLine 
10.
 
11.
del "%AusgangsDatei%%Bak%" 
12.
goto :eof 
13.
 
14.
:ProcessLine 
15.
for /f "delims=;" %%a in ("%Zeile%") do set "KNr=%%a" 
16.
if "%KNr%"=="%Zuletzt%" goto :WriteLine 
17.
set "Zuletzt=%KNr%" 
18.
set "Datei=%Zielordner%%KNr%;%Timestamp%" 
19.
 
20.
:WriteLine 
21.
>>"%Datei%" echo\%Zeile% 
22.
goto :eof
Aufzurufen ist der Batch mit Übergabe der Ausgangsdatei, also etwa:
Aufteilen.cmd "D:\Ein Ordner\116934;10052009;1720.TXT"
Bei Bedarf lässt sich das natürlich auf Bearbeitung aller (".TXT"- ) Dateien im Ordner erweitern ...

Grüße
bastla
Bitte warten ..
Mitglied: Sp3ll3
12.08.2009 um 14:39 Uhr
Hi,

irgendwo vertue ich mich bei dem eintragen der Pfade:

Ursprungsordner: D:\TXT Splitter

Zielordner: D:\TXT Splitter\Ablage

Datei: D:\TXT Splitter\116934;10052009;1720.TXT

Mögt ihr mal eben schauen (schande über mein Haupt.. )
Bitte warten ..
Mitglied: bastla
12.08.2009 um 14:45 Uhr
Hallo Sp3ll3!

Zeile 3 (zu beachten ist der abschließende "\"):
set "Zielordner=D:\TXT Splitter\Ablage\" 
Außerdem wird angenommen, dass der Zielordner bereits existiert, ansonsten noch (jedenfalls vor Zeile 9) einfügen:
if not exist "%Zielordner%" md "%Zielordner%"
Aufruf des Batches:
Aufteilen.cmd "D:\TXT Splitter\116934;10052009;1720.TXT"
Grüße
bastla
Bitte warten ..
Mitglied: bastla
12.08.2009 um 14:57 Uhr
... Nachtrag: Wenn die Einzeldateien in einem anderen Ordner erstellt werden, ist das Umbenennen (und Löschen) der Ausgangsdatei nicht erforderlich, daher:
01.
@echo off & setlocal 
02.
set "AusgangsDatei=%~1" 
03.
set "Zielordner=%~dp1Ablage\" 
04.
 
05.
if not exist "%Zielordner%" md "%Zielordner%" 
06.
 
07.
for /f "tokens=1* delims=;" %%i in ("%~nx1") do set "Timestamp=%%j" 
08.
set "Zuletzt=$" 
09.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%AusgangsDatei%"') do set "Zeile=%%j" & call :ProcessLine 
10.
 
11.
goto :eof 
12.
 
13.
:ProcessLine 
14.
for /f "delims=;" %%a in ("%Zeile%") do set "KNr=%%a" 
15.
if "%KNr%"=="%Zuletzt%" goto :WriteLine 
16.
set "Zuletzt=%KNr%" 
17.
set "Datei=%Zielordner%%KNr%;%Timestamp%" 
18.
 
19.
:WriteLine 
20.
>>"%Datei%" echo\%Zeile% 
21.
goto :eof
In dieser Fassung wird der Zielordner automatisch als Unterordner "Ablage" des Ordners, in welchem die Ausgangsdatei liegt, erstellt und verwendet.

Grüße
bastla
Bitte warten ..
Mitglied: Sp3ll3
12.08.2009 um 15:00 Uhr
wir nähern uns dem Ende, allerdings klappts noch immer nicht wie müsste es denn komplett bei mir aussehen mit den angegebenen Pfaden?
Bitte warten ..
Mitglied: bastla
12.08.2009 um 15:15 Uhr
Eigentlich wie gleich oberhalb ...

Grüße
bastla
Bitte warten ..
Mitglied: Sp3ll3
12.08.2009 um 15:41 Uhr
Er sagt mir das die angegebene Umgebungsoption nicht gefunden wurde und spuckt mir dann folgenden Teil aus:

findstr /n "^" "%AusgangsDatei%"') do set "Zeile=%%j" & call :ProcessLine

goto :eof


:ProcessLine

for /f "delims=;" %%a in
Bitte warten ..
Mitglied: bastla
12.08.2009 um 15:55 Uhr
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":
01.
116934;10052009;1720.TXT 
02.
 
03.
116934;3033968;;20;;;;;;;;; 
04.
116934;2843021;;1;;;;;;;;; 
05.
105206;2658390;;100;;;;;;;;; 
06.
105206;4930004;;10;;;;;;;;; 
07.
106228;4981043;;5;;;;;;;;; 
08.
106228;2740105;;500;;;;;;;;;
Kannst Du das bitte mit der gleichen Vorgangsweise (den gleichen Daten) bei Dir prüfen?

Grüße
bastla
Bitte warten ..
Mitglied: Sp3ll3
12.08.2009 um 16:11 Uhr
Habe den Fehler schon gefunden, danke jetzt funktioniert es.. war ein Rechtschreibfehler..

Besten Dank
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(3)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...