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

Verabeitung von txt-Dateien mittels Batch Verarbeitung

Frage Entwicklung Batch & Shell

Mitglied: Arnie79

Arnie79 (Level 1) - Jetzt verbinden

13.08.2012, aktualisiert 14:44 Uhr, 2724 Aufrufe, 15 Kommentare

Hallo zusammen,
ich benötige Hilfe bei der Verarbeitung einer txt-Datei mittels Batch. Dabei geht es mir eigentlich nur um die Verarbeitung an sich. Es liegt folgende Ausgangssituation in Form der gegebenen txt-Datei vor:

& blabla
& blabla
& blabla - blabla
& blabla : blabla
& blabla
& blabla
& 01.06.12 00:00:00 - 01.07.12 00:00:00
& blabla

system1;8295860,0;1,54317897728E11;2088,504638671875;100,0;
system2;537980,0;1,5625690112E10;34119,76953125;100,0;
system3;8072,0;9,2398864E7;3749,3681640625;100,0;
system4;302408,0;7,40592384E9;3025,327880859375;100,0;
system5;73592,0;6,57774016E8;1318,2540283203125;100,0;

Ziel ist es jetzt die Kommentare zu überspringen und die restlichen Zeilen in eine Datei zu schreiben, wobei allerdings die Information 01.06.12 aus der einen Kommentarzeile jeweils ans Ende der einzelnen Zeilen hängen.

system4;302408,0;7,40592384E9;3025,327880859375;100,0;01.06.12
system5;73592,0;6,57774016E8;1318,2540283203125;100,0;01.06.12

Ich habe es erstmal so gemacht:

01.
type nul >temp.txt 
02.
call :test_1 
03.
goto :eof 
04.
 
05.
:test_1 
06.
for /f "tokens=1,2,3* delims=: " %%i in ('findstr /n $ 2012-06-01\test.txt') do ( 
07.
if not %%j==& ( 
08.
 echo %%j >>temp.txt 
09.
10.
11.
goto :eof 
12.
exit
Das kam dabei heraus

ECHO ist eingeschaltet (ON).
system4;302408,0;7,40592384E9;3025,327880859375;100,0;01.06.12
...
system5;73592,0;6,57774016E8;1318,2540283203125;100,0;01.06.12
ECHO ist eingeschaltet (ON).


Problem sind diese Meldungen am Anfang und am Ende und ich weiß nicht wie das Datum herausbekomme.


Arnie79
Mitglied: ColdZero89
13.08.2012 um 14:39 Uhr
Moin,

mach am anfang mal ein @echo off



Gruß Zero
Bitte warten ..
Mitglied: Arnie79
13.08.2012 um 14:51 Uhr
Hallo,
hatte vergessen zu erwähnen, dass ich das schon versucht habe.

Das Ergebnis ist, dass nun am Anfang und Ende jeweils

ECHO ist ausgeschaltet (OFF).

steht. Nächster versuch ist in Zeile 8

01.
echo. %%j >>temp.txt
Das Ergebnis sieht dann so aus:


system4;302408,0;7,40592384E9;3025,327880859375;100,0;
system5;73592,0;6,57774016E8;1318,2540283203125;100,0;


Also ne Leerzeile am Anfang und Ende und Leerzeichen vor den Zeilen.

Arnie79
Bitte warten ..
Mitglied: ColdZero89
13.08.2012, aktualisiert um 15:41 Uhr
Moin,

müsste das Script nicht so aussehen? Zeile 11 geändert. Du sagst ihm "goto eof" aber wo isn eof? denke das soll das am ende sein oder? damit er danach ein Exit macht.

01.
type nul >temp.txt 
02.
call :test_1 
03.
goto :eof 
04.
 
05.
:test_1 
06.
for /f "tokens=1,2,3* delims=: " %%i in ('findstr /n $ 2012-06-01\test.txt') do ( 
07.
if not %%j==& ( 
08.
 echo %%j >>temp.txt 
09.
10.
11.
 
12.
:eof 
13.
exit
Gruß zero
Bitte warten ..
Mitglied: Arnie79
13.08.2012 um 15:47 Uhr
Hallo,
:eof bedeutet end of file und springt ans Ende der Datei. Zumindest im oberen Block müsste das notwendig sein, sonst würde er die Funktion zweimal ausführen.

Gruß Arnie79
Bitte warten ..
Mitglied: der-blob
13.08.2012, aktualisiert um 16:02 Uhr
Hallöchen, ich vermute mal es hat was mit den leeren zeilen zu tun.. ;)
denn
01.
echo >>C:\temp\temp.txt

bringt ja auch "ECHO ist eingeschaltet (ON)."
Und in der leeren zeile hast du ja nur einen Token dein %%i und kein %%j, also steht in der zeile 8 von dein Code:

01.
echo >>temp.txt



Wenn du also dein code so änderst sollte dies funktionieren:

01.
type nul >temp.txt 
02.
call :test_1 
03.
goto :eof 
04.
 
05.
:test_1 
06.
for /f "tokens=1,2,3* delims=: " %%i in ('findstr /n $ 2012-06-01\test.txt') do ( 
07.
if not %%j==& ( 
08.
 if not "%%j"=="" ( 
09.
  echo %%j >>temp.txt 
10.
11.
12.
13.
goto :eof 
14.
exit
Bitte warten ..
Mitglied: ColdZero89
13.08.2012 um 16:30 Uhr
Moin,

was ich mich immer noch frage: Wohin führt das goto :eof

Ich denke das - aus der-bobs code - goto :eof aus Zeile 13 muss zu einem einfachen :eof gemacht werden ^^

Gruß Zero
Bitte warten ..
Mitglied: der-blob
13.08.2012, aktualisiert um 16:39 Uhr
Tag Cold, wie Arnie schon gesagt hat das EOF heist End Of File, also er geht einfach ans ende der Datei.
wenn man also möchte das nach z.B einer if abfrage man zum ende will, einfach ein goto :eof
man spart sich also goto sprungmarke ...... und gaaaaannnnzzzzzz unten das :sprungmarke


"Mit EOF (End of File) wird das Ende einer Quelle signalisiert, welche in der Regel eine Datei oder ein Datenstrom ist."
Quelle:
http://de.wikipedia.org/wiki/End_of_File

€ wobei bei den ganzen das exit ziemlich sinnlos dort steht, da dieses ja nie erreicht wird.
Bitte warten ..
Mitglied: bastla
13.08.2012 um 16:52 Uhr
Hallo ColdZero89!
Ich denke das - aus der-bobs code - goto :eof aus Zeile 13 muss zu einem einfachen :eof gemacht werden ^^
Wenn sicher ist, dass nach dem Unterprogramm ":test_1" keine weiteren Zeilen hinzugefügt werden, sind sowohl Zeile 14 (die immer) als auch Zeile 13 unnötig ...

... ansonsten wäre "goto :eof" am besten mit "Beende Block" zu übersetzen - in Zeile 3 ist damit der Batch ("Hauptprogramm") gemeint, daher wird tatsächlich der Batch beendet; in Zeile 13 wird dadurch das Ende des Unterprogramms signalilsiert (entspräche einem "Return" in Ur-Basic, oder einem "End Sub") - falls erforderlich, könnte so zB ab Zeile 14 ein weiteres Unterprogramm hinzugefügt werden ...

Grüße
bastla
Bitte warten ..
Mitglied: ColdZero89
13.08.2012 um 16:59 Uhr
Ja Moinsen,

/OT
Ich rieche Feierabend!!!!
/OT

Ok den Beitrag von Arnie hab ich net gesehen - wir haben wohl Zeitgleich geschrieben ^_^ ansonsten erklärt sich das jap

Danke, man lernt täglich dazu.

Gruß zero
Bitte warten ..
Mitglied: bastla
13.08.2012, aktualisiert um 18:56 Uhr
... wobei es eigentlich (fast) ganz ohne "goto :eof" ginge, da zumindest ein Unterprogramm ja gar nicht nötig ist - wenn insbesondere auch keine Leerzeilen im Ergebnis aufscheinen sollen, dürfte ja schon
01.
@echo off & setlocal 
02.
set "Ein=2012-06-01test.txt" 
03.
set "Aus=Ergebnis.txt" 
04.
 
05.
set "Datum=" 
06.
for /f "tokens=2" %%i in ('findstr /brc:"& [0-9][0-9]\.[0-9][0-9]\.[0-9][0-9] " "%Ein%"') do set "Datum=%%i" 
07.
if not defined Datum echo Datum nicht gefunden! & goto :eof 
08.
 
09.
del "%Aus%" 2>nul 
10.
for /f "delims=" %%i in ('findstr /vb "&" "%Ein%"') do >>"%Aus%" echo %%i%Datum%
genügen ...

Grüße
bastla
Bitte warten ..
Mitglied: Arnie79
14.08.2012 um 10:25 Uhr
Hallo zusammen,

erstmal vielen Dank für die Hilfe, klappt super.

Zitat von bastla:
...ein Unterprogramm ja gar nicht nötig ist - wenn insbesondere auch keine Leerzeilen im Ergebnis aufscheinen sollen ...

Könntest du mir das vielleicht genauer erklären, also den Zusammenhang Leerzeile und Unterprogram?

Gruß Arnie79
Bitte warten ..
Mitglied: bastla
14.08.2012, aktualisiert um 10:46 Uhr
Hallo Arnie79!
den Zusammenhang Leerzeile und Unterprogram?
... wollte ich gar nicht herstellen (anstelle des "-" in meinem Kommentar würde sich ein ";" anbieten) - gemeint war: Wenn keine Leerzeilen im Ergebnis benötigt werden, genügt der obige Ansatz (= "findstr" ohne "/n") ...

Grüße
bastla
Bitte warten ..
Mitglied: Arnie79
14.08.2012 um 13:42 Uhr
Hallo bastla,

das habe ich dann falsch verstanden. Hätte da aber noch etwas. Wie gesagt, bei der einen Datei klappt das super. Ich habe da jetzt noch ne Schleife drum herum gebaut, um mehrere Dateien zu verarbeiten. Leider klappt das nicht, genauer gesagt werden die Daten schon richtig in die Datei geschrieben, aber das Datum in diesem Fall nicht angehangen. Was habe ich hier falsch gemacht?

01.
@echo off & setlocal 
02.
set "Aus=temp.txt" 
03.
del "%Aus%" 2>nul 
04.
for /R .\2012-06-01 %%a in (*monthly*.txt) do ( 
05.
  set "Datum=" 
06.
  for /f "tokens=2" %%i in ('findstr /brc:"& [0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]" "%%a"') do set "Datum=%%i" 
07.
  if not defined Datum echo Datum nicht gefunden! & goto :eof 
08.
  for /f "delims=" %%i in ('findstr /vb "&" "%%a"') do echo %%i%Datum% >>"%Aus%"  
09.
)
Gruß Arnie79
Bitte warten ..
Mitglied: bastla
14.08.2012 um 15:10 Uhr
Hallo Arnie79!

Was hier fehlt, ist "delayedExpansion" (Erklärungen dazu findest Du in diversen Threads und natürlich im Tutorial zur FOR-Schleife):
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "Aus=temp.txt" 
03.
del "%Aus%" 2>nul 
04.
for /R .\2012-06-01 %%a in (*monthly*.txt) do ( 
05.
  set "Datum=" 
06.
  for /f "tokens=2" %%i in ('findstr /brc:"& [0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]" "%%a"') do set "Datum=%%i" 
07.
  if not defined Datum echo Datum nicht gefunden! & goto :eof 
08.
  for /f "delims=" %%i in ('findstr /vb "&" "%%a"') do >>"%Aus%" echo %%i!Datum! 
09.
)
Grüße
bastla
Bitte warten ..
Mitglied: Arnie79
14.08.2012 um 15:49 Uhr
Hallo bastla,

Danke, jetzt klappt alles!

Gruß Arnie79
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Multitasking bei Massen-Verarbeitung (Batch)
gelöst Frage von clragonBatch & Shell11 Kommentare

Hey Leute, Ich schraube gerade an Geschwindigkeit und Effizienz meiner Batch herum. Ich versuche ziemlich viele Dateien auf einmal ...

Batch & Shell
2in1 Datei Verarbeitung
gelöst Frage von batchnewbieBatch & Shell4 Kommentare

Hallo, ich komme nicht weiter. Ich möchte meine Batch so verändern, dass sie doppelt funktional läuft. Einmal per for ...

Batch & Shell
Fehler bei Verarbeitung von Batch als SYSTEM bei Systemstart
gelöst Frage von mc-doubleyouBatch & Shell4 Kommentare

Hallo zusammen, ich versteh einfach nicht was ich falsch mache. An und für sich würde meine Batch super arbeiten ...

Batch & Shell
Per Batch eine XLS-Datei in eine TXT-Datei umwandeln
Frage von skiing69Batch & Shell5 Kommentare

Hallo Wissende, ich möchte täglich automatisiert, ohne das Programm Excel zu öffnen, eine XLS-Datei in eine TXT-Datei (Feldtrennzeichen als ...

Neue Wissensbeiträge
Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 10 StundenInternet2 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 14 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 14 StundenWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 17 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Heiß diskutierte Inhalte
Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement21 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Windows Server
Anmeldung direkt am DC nicht möglich
Frage von ThomasGrWindows Server16 Kommentare

Hallo, ich habe bei unserem Server 2016 Standard ein Problem. Keine Ahnung wie das auf einmal passiert ist. Ich ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...

TK-Netze & Geräte
VPN-fähige IP-Telefone
Frage von the-buccaneerTK-Netze & Geräte14 Kommentare

Hi! Weiss noch jemand ein VPN-fähiges IP-Telefon mit dem man z.B. einen Heimarbeitsplatz gesichert anbinden könnte? Habe nur einen ...