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, 5725 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
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 ...

VB for Applications

Inhalt einer Textbox in eine .txt Datei schreiben

gelöst Frage von Just4fun1990VB for Applications4 Kommentare

Hallo Administrator.de User, ich habe jetzt schon sehr lange gesucht und finde leider nichts. Hier allerdings habe ich gute ...

Entwicklung

Batch oder Powershell für .txt-Datei

gelöst Frage von freshman2017Entwicklung5 Kommentare

Hallo liebe Gemeinde, ich habe eine .txt-Datei, die aus einer Artikelnummer und einem Bildname bestehen soll. Ausgangsdatei (export.txt) ist ...

Windows 7

BATCH: Alter einer TXT-Datei bestimmen

gelöst Frage von ahstaxWindows 75 Kommentare

Hallo, wie bekomme ich mit einer DOS-Batch das Alter einer TXT-Datei bestimmt und lassen dann, bspw bei Alter >16h, ...

Neue Wissensbeiträge
iOS
IOS hat nen Cursor !!!
Tipp von Criemo vor 6 StundeniOS

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Off Topic
Avengers 4: Endgame - Erster Trailer
Information von Frank vor 2 TagenOff Topic1 Kommentar

Ich weiß es ist Off Topic, aber ich freue mich auf diesen Film und vielleicht geht es anderen hier ...

Webbrowser
Microsoft bestätigt Edge mit Chromium-Kern
Information von Frank vor 2 TagenWebbrowser5 Kommentare

Microsoft hat nun in seinem Blog bestätigt, dass die nächste Edge Version kein EdgeHTML mehr für die Darstellung benutzen ...

Sicherheit

MikroTik: Sicherheitslücke wird ausgenutzt obwohl ein Update seit langem verfügbar ist

Information von sabines vor 2 TagenSicherheit

Obwohl ein Update, dass die nun massenhaft ausgenutzte Lücke schließt, seit langem (März 2018) verfügbar ist, wird es offensichtlich ...

Heiß diskutierte Inhalte
Exchange Server
Exchange Server 2010: Keine Eingehenden E-MAils
Frage von gabeBUExchange Server15 Kommentare

Hallo Zusammen Ich habe das kurzen auf dem Exchange 2010 Server das Problem, dass ich keine externen E-Mails mehr ...

Rechtliche Fragen
Systemhaus auf Abwegen
Frage von rocco61Rechtliche Fragen13 Kommentare

Hallo zusammen, bin derzeit ratlos bei dem folgenden Scenario: In einen Seniorenheim wurde beschlossen, die IT an eine andere ...

Router & Routing
MikroTik - Routing, Bridging, Switching
gelöst Frage von Alex29Router & Routing9 Kommentare

Hallo in die Runde, als Hobby-Admin würde ich bitte mal wieder Eure Hilfe benötigen. Seit der Umstellung auf RouterOS ...

Outlook & Mail
Kalendersync mit Android und Outlook
Frage von Stefan007Outlook & Mail8 Kommentare

Hi Leute, kennt jemand eine Möglichkeit um Termine zwischen installiertem Outlook auf dem PC und dem Kalender auf einem ...