Top-Themen

Aktuelle Themen (A bis Z)

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 TXT-Datei mit Batch trennen - Dateiname und Inhalt aus diesem File generieren

Mitglied: Wolff

Wolff (Level 1) - Jetzt verbinden

10.10.2007, aktualisiert 16.10.2007, 5669 Aufrufe, 8 Kommentare

Guten Morgen zusammen

ich habe gestern Biber schon per PN gefragt ob er mir bei meinem Problem helfen könnte und er meinte, es wäre ein interessantes und nützliches Thema, das ruhig öffentlich gelöst werden sollte

Mein Problem ist folgendes:
Ich bekomme automatisch generierte SMS auf meine UMTS-Karte.
Diese SMS werden mit einer Software empfangen und in eine einzige Datei
geschrieben.

Der Aufbau der Datei ist wie folgt:
2007-10-08 15:31:48'02 SMS: +4917112345678 2007-10-08 14:47:06 [08]

Hier steht der Text mit max. 160 Zeichen

Zur Erklärung:
Erst das Empfangsdatum mit Uhrzeit, gefolgt von dem Typ, Handynummer des
Senders, Datum der SMS und Uhrzeit der SMS sowie GSM-Code.
Anschließend eine Leerzeile und der SMS-Text und wieder eine Leerzeile.

Ich brauche ein Script, dass es mir erlaubt die Handynummer, die Absendezeit
und das Absendedatum in Variablen zu speichern um damit eine Verzeichnisstruktur
anlegen zu können %Handynummer%\%Datum%\

Die Uhrzeit soll der Dateiname werden und der Inhalt der Datei soll der Text
werden.

Der Sinn ist die Archivierung der Daten(SMS) nach Rufnummer.



Falls es für jemanden interessant ist, kann ich auch gerne Erklären welche Programme ich nehme und wie das Senden/Empfangen der SMS funktioniert.
Vielleicht braucht ja auch jemand so eine Lösung!?

Viele Grüße
Mitglied: bastla
10.10.2007 um 12:59 Uhr
Hallo Wolff!

Woran ist die Kopfzeile sicher zu erkennen? Befindet sich zB in jeder derartigen Zeile die Zeichenfolge "'02 SMS:", möglichst auch noch ab Position 20, oder muss man/frau sich darauf verlassen, dass sie jeweils auf die zweite Leerzeile folgt?

Außerdem: Wird jede Handynummernvorwahl mit führendem "+" angegeben?

Grüße
bastla
Bitte warten ..
Mitglied: Wolff
10.10.2007 um 13:05 Uhr
Die Handynummer wird immer im internationalen Format angegeben...also immer mit + allerdings kann die Länge unterschiedlich sein, da es ja in Deutschland verschieden lange Handynummern gibt.

Die Zeichenfolge der Kopfzeile ist immer wie im Beispiel, also Datum Uhrzeit plus "SMS" und danach der Rest.

Wenn man alle Leerzeilen entfernt, wäre es immer die ungerade Zeile...also 1,3,5...
In der geraden Zeile steht immer der Text.
Bitte warten ..
Mitglied: bastla
10.10.2007 um 13:32 Uhr
Hallo Wolff!

Wenn man alle Leerzeilen entfernt, wäre es immer die ungerade Zeile...also 1,3,5...
Unter dieser Voraussetzung könnte es so klappen:
01.
@echo off & setlocal 
02.
set "Quelle=D:\SMS.txt" 
03.
set "Ziel=D:\SMS-Ablage" 
04.
 
05.
set Kopf=True 
06.
for /f "usebackq delims=" %%i in ("%Quelle%") do set "Zeile=%%i" & call :ProcessLine 
07.
goto :eof 
08.
 
09.
:ProcessLine 
10.
set "Zeile=%Zeile:>=^>%" 
11.
set "Zeile=%Zeile:<=^<%" 
12.
if not defined Kopf (echo %Zeile%)>>"%Datei%" & set Kopf=True & goto :eof 
13.
 
14.
for /f "usebackq tokens=2 delims=+" %%l in ('echo %Zeile:'=%') do for /f "tokens=1-3" %%a in ('echo %%l') do set "Nr=%%a" & set "Datum=%%b" & set "Zeit=%%c" 
15.
if not exist "%Ziel%\%Nr%" md "%Ziel%\%Nr%" 
16.
if not exist "%Ziel%\%Nr%\%Datum%" md "%Ziel%\%Nr%\%Datum%" 
17.
set "Datei=%Ziel%\%Nr%\%Datum%\%Zeit::=.%.txt" 
18.
set Kopf=
Grüße
bastla

[Edit] echo %Zeile:'=% verwendet, um störendes Apostroph zu eliminieren. [/Edit]
[Edit2] Handling für "<" und ">" im Text ergänzt. [/Edit2]
Bitte warten ..
Mitglied: Wolff
10.10.2007 um 13:42 Uhr
Das hat mir schon mal sehr weitergeholfen und funktioniert auch gut (Dateien und Verzeichnisse).

Aber die Dateien sind leer, es fehlt also der Text der SMS

Kannst du mir das in ganz groben Zügen mal erklären?


Viele Grüße
Daniel
Bitte warten ..
Mitglied: bastla
10.10.2007 um 14:13 Uhr
Hallo Wolff!

Vorweg: Mit meinen Testdaten, die ich aus deinem Eröffnungsposting entnommen habe, funktioniert es (auch schon vor der unten angesprochenen Änderung).

01.
set Kopf=True
Da die Zeilen abwechselnd "Kopf" und "Text" sind, verwende ich einen Schalter, um die jeweils nächste Zeile zu charakterisieren.

01.
for /f "usebackq delims=" %%i in ("%Quelle%") do set "Zeile=%%i" & call :ProcessLine
Mit dieser Schleife werden alle Zeilen der Quelldatei einzeln behandelt, wobei Leerzeilen ignoriert werden. Es wird zunächst die Zeile in einer Variablen zwischengespeichert und dann das Unterprogramm zur eigentlichen Bearbeitung aufgerufen.

01.
if not defined Kopf (echo %Zeile%)>>"%Datei%" & set Kopf=True & goto :eof
Wenn der Schalter "Kopf" anzeigt, dass jetzt keine Kopfzeile vorliegt, sollte eigentlich der Text in die durch die Variable %Datei% vorgegebene Zieldatei geschrieben werden. Der Schalter wird dann für die nächste Zeile wieder auf "Kopf" gesetzt und das Unterprogramm verlassen.

Auch wenn dieser Teil anscheinend tut, was er soll, eine kurze Erläuterung (und eine Ergänzung):
01.
for /f "usebackq tokens=2 delims=+" %%l in ('echo %Zeile:'=%') do for /f "tokens=1-3" %%a in ('echo %%l') do set "Nr=%%a" & set "Datum=%%b" & set "Zeit=%%c"
Das erste "for" teilt die Zeile unter Verwendung des "+" als Trennzeichen und verwendet den zweiten Teil der Zeile.
Mit dem zweiten "for" wird dieser Teil weiter zerlegt. Da die einzelnen Bestandteile durch Leerzeichen getrennt sind, muss kein spezieller "Delimiter" angegeben werden. Die ersten 3 Teile werden den entsprechenden Variablen zugewiesen.

Da die Kopfzeile ein "'" enthält, habe ich in diese Zeile (auch im Batch oben) noch etwas verändert, um das Apostroph auszufiltern.

01.
if not exist "%Ziel%\%Nr%" md "%Ziel%\%Nr%" 
02.
if not exist "%Ziel%\%Nr%\%Datum%" md "%Ziel%\%Nr%\%Datum%"
Falls das Zielverzeichnis noch nicht existiert, wird es hier erstellt. Eigentlich muss dies nicht schrittweise erfolgen, so dass Du die erste dieser beiden Zeilen auch ersatzlos streichen kannst.

01.
set "Datei=%Ziel%\%Nr%\%Datum%\%Zeit::=.%.txt"
Da in einem Dateinamen ein ":" nicht zulässig ist, wird dieser durch "." ersetzt und der Name der Zieldatei samt Pfad in eine Variable geschrieben.

01.
set Kopf=
Die nächste Zeile ist keine Kopfzeile, daher Schalter "Kopf" löschen.
Zur Fehlersuche könntest Du zunächst das "@echo off" auf "@echo on" ändern und dann den Batch so aufrufen:
01.
Batchname > Log.txt
Anhand der "Log.txt" kannst Du dann den Ablauf nachvollziehen.

Grüße
bastla
Bitte warten ..
Mitglied: Wolff
10.10.2007 um 14:33 Uhr
Vielen Dank für diese echt super Erklärung!

Also mit meinem Test-Text geht es da hast du vollkommen Recht.

Ich vermute mal, dass es an den Sonderzeichen der Status-SMS liegt
Manchmal ist da ein "<" oder ">" drin bzw. am Anfang ein "<LANG>" wenn die SMS gesplittet wurde weil es mehr als 160 Zeichen waren.

Lässt dich das trotzdem irgendwie verarbeiten oder ist das gar nicht der Fehler?
Mir ist nur aufgefallen, dass es ohne diese Zeichen problemlos funktioniert *freu*

Viele Grüße
Daniel
Bitte warten ..
Mitglied: bastla
10.10.2007 um 14:41 Uhr
Hallo Wolff!

Ich ergänze den Batch oben um das Handling für "<" und ">".

Grüße
bastla
Bitte warten ..
Mitglied: Wolff
16.10.2007 um 13:09 Uhr
läuft alles perfekt!!!
vielen dank für diese super hilfe!!!
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Welche Codierung für txt files um in einer batch Datei richtig aufgerufen werden zu können?

Frage von patme1Batch & Shell3 Kommentare

Hi! Ich habe eine txt Datei, welche ich in einer batch file einlesen möchte. In dieser sind Sonderzeichen, wie ...

Batch & Shell

CMD-Batch hilfe: Dateiname zu txt

Frage von Syscore64Batch & Shell2 Kommentare

Guten Abend, ich möchte eine batch datei erstellen mit den Funktion alle im Ordner befindeten Datein eine .txt erstellen ...

Batch & Shell

Inhalt einer .txt als eine Variable setzen mit Batch

gelöst Frage von AlexIOTBatch & Shell3 Kommentare

Hallo Zusammen, In der Variable.txt steht immer nur ein einziger Rechnername! - wie folgt: EW085IDFV001 Ich möchte das dieser ...

Batch & Shell

Txt Inhalt in batch variabel verwenden

gelöst Frage von quan81Batch & Shell17 Kommentare

Liebes Forum ich bin neu dabei und freu mich wenn mir jemand helfen kann. Ich versuche per .bat file ...

Neue Wissensbeiträge
SAN, NAS, DAS
QNAP NAS Datenschutz-Loop nach Firmware-Update
Tipp von vanTast vor 7 StundenSAN, NAS, DAS1 Kommentar

Moin, im allgemeinen Trend seine geänderten Datenschutzbedingungen den Kunden zukommen zu lassen kam die Firma QNAP auf die glorreiche ...

Datenschutz
DSGVO Datenschutzgesetz
Anleitung von 1Werner1 vor 8 StundenDatenschutz4 Kommentare

Moin, ja was ist das, da ist die DSGVO Datenschutzverordnung. Wie das Gesetz gibt es schon 2 Jahre? Nun ...

CPU, RAM, Mainboards
Neverending story
Tipp von keine-ahnung vor 1 TagCPU, RAM, Mainboards1 Kommentar

Da kommt man mit dem fixen gar nicht mehr hinterher und die CPU erreichen wieder Rechenleistungen im Bereich des ...

Multimedia & Zubehör
AVM Fritz USB WLAN Sticks schneller einschalten
Tipp von NetzwerkDude vor 3 TagenMultimedia & Zubehör4 Kommentare

Die AVM Fritz WLAN Sticks haben in der Firmware 2 Modis: Einmal als Massenspeicher und einmal als WLAN Netzwerkkarte ...

Heiß diskutierte Inhalte
PHP
Nach Umzug zu 1und1 bekomme ich beim Eintrag in die DB Tabelle folgenden Fehler
gelöst Frage von jensgebkenPHP35 Kommentare

INSERT command denied to user 'dbo45342345342231244'@'112.127.102.073' for table 'orders'

LAN, WAN, Wireless
Powerline über zwei Stockwerke optimieren
gelöst Frage von DultusLAN, WAN, Wireless33 Kommentare

Guten Morgen liebes Forum, ich hätte einmal eine Frage bezüglich Powerline Adapter: Mein Problem ist seit gestern präsent, da ...

Windows Userverwaltung
Problem mit Benutzerprofil
Frage von lieferscheinWindows Userverwaltung24 Kommentare

Guten Tag liebe Community, folgendes Problem habe ich: User meldet sich auf Client A an - sein Homelaufwerk verbindet. ...

Off Topic
DISKUSSION: Was bringt der Disclaimer "Wenn Sie nicht der Empfänger sind."
Frage von N8DragonOff Topic21 Kommentare

So oder ähnlich, lese ich immer wieder Kleingedrucktes am Ende diverser Mails. Letzten Endes wollen sie mir alle sagen, ...