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

Batch - Dezimalzahlen-Addition des Inhalts zweier Dateien mit anschließendem zurückschreiben

Mitglied: BlattlausOG

BlattlausOG (Level 1) - Jetzt verbinden

23.06.2014, aktualisiert 20:18 Uhr, 1746 Aufrufe, 7 Kommentare

Hallo,

ich müsste mich wieder an Euch wenden, da ich nicht weiterkomme um mein Vorhaben umzusetzen.

Das Problem liegt in den letzten zwei Zeilen:
Ich lese mit...
for /f "tokens=1-12* delims=- " %%a in (%IN%) do echo %%l %%i>>"%TEMP%"
...und...
for /f "tokens=1-12* delims=- " %%a in (%OUT%) do echo %%l %%i>>"%TEMP1%"
...den Inhalt zweier Dateien ein und erhalte in die Ausgabedatei "temp.txt"...
Test 1
TestTest 46
dashier 2
TestTestTest 32
...und in die Ausgabedatei "temp1.txt"...
Test 834
TestTest 46
TestTestTest 43942
...ein.
(die Zeile mit dem Wort "dashier" wird rausgefiltert)

Nun möchte ich, dass das Script die Zahlen der "temp.txt" zu den Zahlen in "temp1.txt" addiert.
Das Ergebnis sollte demnach in "archiv.txt" folgendermaßen aussehen:
Test 835
TestTest 46
TestTestTest 43974

Hat die Verrechnung stattgefunden, sollen die Werte...
Test 835
TestTest 46
TestTestTest 43974
nach set "OUT=c:\archiv.txt" zurückgeschrieben und die vorhandenen überschrieben werden.
(Siehe tokens & delims der letzten zwei Zeilen!)

Mein derzeitiger Code:
01.
@echo on & setlocal 
02.
set "IN=c:\log" 
03.
set "OUT=c:\archiv.txt" 
04.
set "TEMP=c:\_TEMP.txt" 
05.
set "TEMP1=c:\_TEMP1.txt" 
06.
 
07.
set "Entf=dashier" 
08.
 
09.
:Stichwörter suchen; wenn gefunden Zeile löschen 
10.
findstr /v /i "%Entf%" "%IN%">"%OUT%" 
11.
 
12.
:Zahlen-Addition mit folgendem rückschreiben 
13.
for /f "tokens=1-12* delims=- " %%a in (%IN%) do echo %%l %%i>>"%TEMP%" 
14.
for /f "tokens=1-12* delims=- " %%a in (%OUT%) do echo %%l %%i>>"%TEMP1%" 
15.
...
Für jede Hilfe bin ich Dankbar

Gruß,
Blattlaus
Mitglied: Snowman25
24.06.2014 um 10:09 Uhr
Hallo BlattlausOG,

wenn du die Strings so aufteilst,dass du die Zahlen in Variablen schreiben kannst, kannst du SET /A verwenden, um die Zahlen zu addieren.
Hoffe das hilft!

Gruß,
Snowman25
Bitte warten ..
Mitglied: BlattlausOG
24.06.2014 um 12:45 Uhr
Hallo Snowman,

danke für deine Antwort.

Genau dies habe ich bereits versucht in Eigenregie hinzubekommen, mir ist jedoch die richtige Formatierung der Zeilen nicht bekannt.

Dachte es wird sich jemand bereit erklären der mir die Zeilen vervollständigt, aber auch konkrete Hinweise bzw. Tips hierzu sind Willkommen.

Das mit
/A
gerechnet wird war mir bekannt, nur wie genau...

Gruß,
Blattlaus
Bitte warten ..
Mitglied: Snowman25
24.06.2014, aktualisiert um 15:14 Uhr
Zum "Wie genau" habe ich mal eine Anleitung geschrieben: Rechnen in Batch
Hier mal ein Ansatz Ungetestet:
01.
@ECHO off 
02.
SETLOCAL EnableDelayedExpansion 
03.
 
04.
 
05.
set "IN=c:\log.txt" 
06.
set "OUT=c:\archiv.txt" 
07.
set "TEMP=c:\_TEMP.txt" 
08.
set "TEMP1=c:\_TEMP1.txt" 
09.
 
10.
set "Entf=dashier" 
11.
 
12.
:: Stichwörter suchen; wenn gefunden Zeile löschen 
13.
findstr /v /i "%Entf%" "%IN%">"%OUT%" 
14.
 
15.
 
16.
SET line=0 
17.
FOR /F "delims=" %%a IN (%IN%) DO ( 
18.
	CALL :set_last %%a 
19.
	SET result_a=!last! 
20.
	FOR /F "skip=!line! delims=" %%b IN (%OUT%) DO ( 
21.
		CALL :set_last %%b 
22.
		SET result_b=!last! 
23.
		GOTO :CONTINUE 
24.
25.
	:CONTINUE 
26.
	SET /A result=!result_a! + !result_b! 
27.
	:: TODO: 
28.
	:: ECHO Anfang des Strings bis zum letzten Token und hänge %result% an. 
29.
	 
30.
	SET /A line=!line!+1 
31.
32.
 
33.
	 
34.
GOTO :EOF 
35.
 
36.
:set_last 
37.
	FOR %%x IN (%*) DO SET last=%%x 
38.
	GOTO :EOF
Gruß,
Andreas
Bitte warten ..
Mitglied: BlattlausOG
24.06.2014 um 18:56 Uhr
Hallo Andreas,

vielen Dank für deine Unterstützung.

Natürlich habe ich sofort deinen Quelltext getestet, jedoch habe ich das Gefühl, er kopiert nur die Zahlen von log nach Archiv.txt. Es findet keine Verrechnung bzw. Addition statt.

Inhalt der log:
Datum/Uhrzeit: 2014.05.26 06:27:26 | Name: Mike | Zähler(123): 3 | Nr.: g4246/899464
Datum/Uhrzeit: 2014.05.26 10:42:52 | Name: Olaf | Zähler(123): 6 | Nr.: 656uP47768/6989x0
Datum/Uhrzeit: 2014.05.26 17:37:01 | Name: Karin | Zähler(123): 1 | Nr.: 5432/tQr786

Inhalt der archiv.txt:
Datum/Uhrzeit: 2014.05.24 23:04:30 | Name: Nina | Zähler(123): 53 | Nr.: g4246/899464
Datum/Uhrzeit: 2014.05.24 23:31:09 | Name: Heike | Zähler(123): 12 | Nr.: 53eT6/6s4Qp
Datum/Uhrzeit: 2014.05.24 23:59:35 | Name: Olaf | Zähler(123): 1573 | Nr.: 000/s451d8

Das Script wird ausgeführt -> über log wird erkannt, dass "Nr: g4246/899464" in Archiv.txt enthalten ist -> den Wert von "Zähler(123): 3" aus log also 3 mit "Zähler(123): 53" aus archiv.txt verrechnen/addieren -> den vorhandenen Wert in archiv.txt "Zähler(123): 53" mit dem Ergebnis "56" überschreiben, alle Zeilen die "Nr: g4246/899464" beinhalten -> nicht vorhandene Nummern "Nr.:" sollen von log nach Archiv.txt kopiert werden -> schön wäre noch, dass der jüngste Zeitstempel immer in die erste Zeile geschrieben wird.

Ergebnis:

Inhalt der archiv.txt nach dem Ausführen:
Datum/Uhrzeit: 2014.05.26 17:37:01 | Name: Karin | Zähler(123): 1 | Nr.: 5432/tQr786
Datum/Uhrzeit: 2014.05.26 10:42:52 | Name: Olaf | Zähler(123): 6 | Nr.: 656uP47768/6989x0
Datum/Uhrzeit: 2014.05.24 23:59:35 | Name: Olaf | Zähler(123): 1573 | Nr.: 000/s451d8
Datum/Uhrzeit: 2014.05.24 23:31:09 | Name: Heike | Zähler(123): 12 | Nr.: 53eT6/6s4Qp
Datum/Uhrzeit: 2014.05.24 23:04:30 | Name: Nina | Zähler(123): 56 | Nr.: g4246/899464

Wäre da was zu machen?

Werde definitiv deine Anleitung mal anschauen, ob ich jedoch als Grünschnabel dieses Vorhaben selbständig umsetzen kann stelle ich in Frage.

Gruß,
Blattlaus
Bitte warten ..
Mitglied: BlattlausOG
26.06.2014, aktualisiert um 10:44 Uhr
Hallo,

ich habe mich nun damit auseinandergesetzt, irgendwie klappts aber nicht.

Mein Code:
01.
@ECHO off 
02.
SETLOCAL EnableDelayedExpansion 
03.
 
04.
 
05.
set "IN=c:\log" 
06.
set "OUT=c:\archiv.txt" 
07.
set "TEMP=c:\_TEMP.txt" 
08.
set "TEMP1=c:\_TEMP1.txt" 
09.
set "TEMP2=c:\_TEMP2.txt" 
10.
 
11.
set "Entf=dashier" 
12.
 
13.
:: Stichwörter suchen; wenn gefunden Zeile löschen 
14.
findstr /v /i "%Entf%" "%IN%">"%OUT%" 
15.
 
16.
 
17.
SET line=0 
18.
FOR /F "delims=" %%a IN (%IN%) DO ( 
19.
	CALL :set_last %%a 
20.
	SET result_a=!last! 
21.
	FOR /F "skip=!line! delims=" %%b IN (%OUT%) DO ( 
22.
		CALL :set_last %%b 
23.
		SET result_b=!last! 
24.
		GOTO :CONTINUE 
25.
26.
	:CONTINUE 
27.
	SET /A result=!result_a! + !result_b! 
28.
	:: TODO: 
29.
	:: ECHO Anfang des Strings bis zum letzten Token und hänge %result% an. 
30.
	ECHO %result% >>"%TEMP2%" 
31.
	 
32.
	SET /A line=!line!+1 
33.
34.
 
35.
	 
36.
GOTO :EOF 
37.
 
38.
:set_last 
39.
	FOR %%x IN (%*) DO SET last=%%x 
40.
	GOTO :EOF
Ich erhalte als Ausgabe in %TEMP2% :
ECHO ist eingeschaltet (ON).

Was läuft hierbei verkehrt?
Laut Internet sollen Leerzeichen in der Variable dafür verantwortlich sein!?

Weis jemand Rat?

Vielen Dank.

Gruß,
Blattlaus
Bitte warten ..
Mitglied: Snowman25
26.06.2014 um 11:08 Uhr
Hi Blattlaus,

beim schreiben der Batch bin ich davon ausgegangen, dass die letzte Zeichengruppe deiner Zeilen die Nummer enthält.
Leider scheint das in deinem Log nicht so zu sein, weshalb in result_a und result_b keine Zahlen stehen und somit auch nicht verrechnet werden können.

Wie es aussieht ist das 9te Token das, welches du "verrechnet" haben möchtest? Da wird das ganze etwas komplizierter.
Vielleicht wäre es doch besser, das ganze als Excel-Datei zu öffnen und dann per VBA zu verrechnen.

Gruß,
Snowman25
Bitte warten ..
Mitglied: BlattlausOG
26.06.2014, aktualisiert um 15:54 Uhr
Hallo Andreas,

beim schreiben der Batch bin ich davon ausgegangen, dass die letzte Zeichengruppe deiner Zeilen die Nummer enthält.
Leider scheint das in deinem Log nicht so zu sein, weshalb in result_a und result_b keine Zahlen stehen und somit auch nicht verrechnet werden können.
Ich habe zum testen in die die log und archiv.txt Dateien jeweils Name, Leerzeichen und eine Nummer geschrieben und gespeichert. In diesem Fall wurde auch folgendes ausgegeben:
ECHO ist eingeschaltet (ON).

Wie es aussieht ist das 9te Token das, welches du "verrechnet" haben möchtest? Da wird das ganze etwas komplizierter.
Vielleicht wäre es doch besser, das ganze als Excel-Datei zu öffnen und dann per VBA zu verrechnen.
Ja, das 9.te Token ist die Zahl die addiert werden soll, sofern die Variabe des 12.ten Token zwichen log und archiv.txt gleich ist.

Batch würde ich bevorzugen, Visual Basic ist natürlich auch ne Option, allerdings hab ich davon absolut keine Ahnung...

Danke und Gruß,
Blattlaus
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Batch Datei drucken und anschließend verschieben

Frage von jehlencoBatch & Shell4 Kommentare

Hallo, ich habe mal wieder eine Frage, jedoch dieses mal kleiner - zu einer Batch Datei :) Ich möchte ...

Batch & Shell

Per Batch Datei öffnen erste Zeile ändern und in anderer Datei zurückschreiben

gelöst Frage von charlybyBatch & Shell10 Kommentare

Hallo an die Gemeinde als Anfänger hänge ich wohl an einer einfachen Sache fest. Es gibt eine xml Datei, ...

Batch & Shell

Batch vergleich von zwei dateien

gelöst Frage von realdavegerBatch & Shell6 Kommentare

Hallo, nach Jahrelangem zugucken, habe ich jetzt schlussendlich eine Frage welche ich selbst stelle. Ich versuche 2 zeiten aus ...

Batch & Shell

Zwei Werte vergleichen in einer Batch-Datei

gelöst Frage von PatrickHeissi10Batch & Shell1 Kommentar

Ich möchte die beiden Variablen %eins% und %zwei% vergleichen haben diese den gleichen Wert haben-> goto einszwei Danke

Neue Wissensbeiträge
Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 1 TagWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Sicherheit
Microsoft und Skype: Sicherheit
Information von kgborn vor 1 TagSicherheit

Die Tage gab es ja einige Berichte zur Sicherheit des Skype-Updaters. Der Updater von Skype läuft unter dem Konto ...

Datenschutz

Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10

Information von Penny.Cilin vor 2 TagenDatenschutz8 Kommentare

Hallo, passend zum Thema Ablösung LIMUX in München ein interessanter Beitrag dazu: Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10 Anscheinend ...

Sicherheit
Information Security Hub Munich airport
Information von brammer vor 2 TagenSicherheit

Hallo, Neues Center für Cyber Kriminalität am Münchener Flughafen brammer

Heiß diskutierte Inhalte
DSL, VDSL
Mindestgeschwindigkeiten DSL Telekom
Frage von justlukasDSL, VDSL14 Kommentare

Hallo zusammen, Seit diesem Jahr habe ich Verständnisprobleme mit dem Verhalten der Telekom. Wir haben seit einem Jahr VDSL ...

Switche und Hubs
LANCOM-Switch: Probleme (no link) mit SFP-Modulen?
Frage von THETOBSwitche und Hubs11 Kommentare

Hi zusammen, ich habe folgendes Problem: Und zwar habe ich an einem Standort drei Switche verbaut - LANCOM GS-2326P+, ...

Humor (lol)
Was könnte man mit einem Server machen? Idee gesucht
Frage von 2SeitenHumor (lol)11 Kommentare

Hey Zusammen Ich habe einen alten HP G2 Rackserver zu Hause rumliegen. 28GB Ram, 1xAMD Prozi mit etwa 2GHz. ...

Firewall
RB2011 Firewall Rule eine bestimmte Mac oder IP Adresse nicht zu blockieren
Frage von lightmanFirewall10 Kommentare

Hallo liebes Forum mit ihren Spezialisten. Ich habe meine Firewall so konfiguriert das kein Endgerät ohne meine Speziellen Erlaubnis ...