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

Frage Entwicklung Batch & Shell

Mitglied: Wolff

Wolff (Level 1) - Jetzt verbinden

10.10.2007, aktualisiert 16.10.2007, 5645 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
Mac OS X

MacOS wo ist die Tilde ?

Tipp von Alchimedes vor 8 StundenMac OS X1 Kommentar

Hallo, ich hab eine MacOS qwertz Keyboard auf US Layout umgestellt da die Sonderzeichen besser erreichbar sind. Leider fehlt ...

Datenschutz

Weitere Informationen zum Sicherheitsproblem BeA

Information von Penny.Cilin vor 15 StundenDatenschutz

Im folgenden ein weiterer Bericht über die Sicherheitsprobleme von Bea. Fataler Konstruktionsfehler im besonderen elektronischen Anwaltspostfach Gruss Penny

Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 17 StundenWindows 103 Kommentare

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 20 StundenMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...

Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von fyrb38Windows 1018 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...

Microsoft Office
Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei
Anleitung von SarekHLMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...