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

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, 2698 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Mittels Batch alle .txt Dateien eines Verzeichnises ändern (10)

Frage von mttspeedy zum Thema Batch & Shell ...

Batch & Shell
gelöst 2 große TXT Dateien vergleichen und Unterschiede in andere Datei schreiben (6)

Frage von sid.pdm zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell: Variablen aus .txt Dateien heraus ausgeben (5)

Frage von Tobiased zum Thema Batch & Shell ...

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