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

Zahlen aus einer Datei auslesen und mit Batch addieren

Frage Entwicklung Batch & Shell

Mitglied: Bobbel323

Bobbel323 (Level 1) - Jetzt verbinden

05.06.2009, aktualisiert 10:54 Uhr, 15014 Aufrufe, 11 Kommentare

Zuerst möchte ich mich schon mal im vorraus bei allen bedanken die mir helfen das Problem zu lösen.

Hallo zusammen,

ich habe mir eine Batch gebastelt um Daten aus meinen Logfiles rauszufiltern. Nun stehe ich aber vor einem Problem das ich alleine nicht lösen kann.
Meine Batch Datei soll anhand eines FOR Befehls (denke das ist das Beste) aus einem Logfile Zahlen rausfiltern (stehen in jeder Zeile an der selben Position, sollte also mit tokens=... gehen) und diese dann addieren. Das Ergebnis soll dann in eine Datei geschrieben werden. Die Zahlen haben kein Komma !

Einige werden sagen, nimm doch VBS ! Aber nein, ich bin der Meinung das muss auch mit DOS gehen.

Freue mich über eure Beiträge.

Vielen Dank.
Mitglied: holzholer
05.06.2009 um 11:01 Uhr
Hallo,

mit SET /A kann man zahlen in Variablen speichern und dann auch damit rechnen. Weitere Infos hierzu findest du mit SET /? und natürlich in der Suche hier im Forum.

Grüße
Bitte warten ..
Mitglied: bastla
05.06.2009 um 11:02 Uhr
Hallo Bobbel323 und willkommen im Forum!

Da die Beschreibung Deines Logfiles etwas sparsam ausgefallen ist, musst Du die "for"-Schleife eben selbst anpassen:
01.
@echo off & setlocal 
02.
set /a Summe=0 
03.
 
04.
for /f "tokens=2 delims=," %%i in (D:\Logfile.log) do set /a Summe+=%%i 
05.
>D:\Ergebnis.txt echo %Summe%
Grüße
bastla
Bitte warten ..
Mitglied: TWAWLW
05.06.2009 um 11:04 Uhr
Hi,

Sollte mit set /a gehen. Les doch mal hier:

http://de.wikibooks.org/wiki/Batch-Programmierung:_Programmierungshilfe ...

Viel Erfolg,
TWAWLW

PS: Hoppla, da war wohl einer schneller ...
Bitte warten ..
Mitglied: Bobbel323
05.06.2009 um 13:21 Uhr
Hallo und danke für die Tips:

@bastla:

Hier ein Teil meines Test.Scripts:


echo Enter a logfile name followed by CRTL+Z to start:
copy con filename.tmp
echo.
echo DONE

REM #Copy user interaction to var FILENAME
for /f "delims=~" %%i in (filename.tmp) do set FILENAME=%%i

REM #Creating variables
set "Datei=sort.txt"
set "Bak=.bak"
set /a LineNo=0
set /a Summe=0

for /f "usebackq skip=1 tokens=2" %%i in ("%FILENAME%") do set /a Summe+=%%i >> %FILENAME%_summary.txt echo %Summe%

Ergebnis:
D:\>set /a Summe+=54870865 echo 0 1>>D:\ABCI-D-Tapes-05.txt_summary.txt
Missing operator.

D:\>set /a Summe+=136935065 echo 0 1>>D:\ABCI-D-Tapes-05.txt_summary.txt
Missing operator.

D:\>set /a Summe+=327903 echo 0 1>>D:\ABCI-D-Tapes-05.txt_summary.txt
Missing operator.

D:\>set /a Summe+=55483411 echo 0 1>>D:\ABCI-D-Tapes-05.txt_summary.txt
Missing operator.

D:\>set /a Summe+=139899871 echo 0 1>>D:\ABCID-Tapes-05.txt_summary.txt
Missing operator.

D:\>set /a Summe+=134457 echo 0 1>>D:\ABCI-D-Tapes-05.txt_summary.txt
Missing operator.

D:\>set /a Summe+=137028631 echo 0 1>>D:\ABCI-D-Tapes-05.txt_summary.txt
Missing operator.

D:\>set /a Summe+=54628156 echo 0 1>>D:\ABCI-D-Tapes-05.txt_summary.txt
Missing operator.

Mein Texfile sieht in etwa so aus:
"Tape" "Data Size in Kilobytes" "Last Time Written Unix Time"
ABCI 534 135403085 1241132402
ABCI 539 54894796 1241136062


Wobei mich nur die Zahl im im 2.Feld interessiert.
Bitte warten ..
Mitglied: bastla
05.06.2009 um 15:41 Uhr
Hallo Bobbel323!

Das Ergebnis kannst Du erst nach Ende der Schleife schreiben, daher etwa so:
01.
@echo off & setlocal 
02.
set "FILENAME=" 
03.
set /p FILENAME=Enter a logfile name to start: 
04.
if not defined FILENAME (echo Keine Logdatei angegeben! & goto :eof) 
05.
 
06.
REM #Creating variables 
07.
set "Datei=sort.txt" 
08.
set "Bak=.bak" 
09.
set /a LineNo=0 
10.
set /a Summe=0 
11.
 
12.
for /f "usebackq skip=1 tokens=2" %%i in ("%FILENAME%") do set /a Summe+=%%i 
13.
>%FILENAME%_summary.txt echo %Summe%
Noch eine Anmerkung: Da es sich um relativ hohe Zahlenwerte handelt, wirst Du früher oder später an die Genauigkeitsgrenze der Berechnungen in CMD stoßen - (positive) Zahlen über 2147483647 (2^31 - 1) kannst Du per CMD-Artihmetik mit "set /a" nicht verarbeiten ...

Grüße
bastla

[Edit] Prüfung auf "leere" Eingabe des Dateinamens hinzugefügt [/Edit]
Bitte warten ..
Mitglied: Bobbel323
05.06.2009 um 16:04 Uhr
Hallo Bastla,

vielen Dank für deine Hilfe, allerdings verstehe ich hier etwas nicht so ganz.

Wenn ich deine Batch so ausführe dann bekomme ich weiterhin den Missing Operator Fehler

D:\>for /F "usebackq skip=1 tokens=2" %i in ("D:\GIS-D-Tapes-05.txt") do set /a

D:\>set /a Summe+=135403085 echo 0 1>D:\GIS-D-Tapes-05.txt_summary.txt
Missing operator.

D:\>set /a Summe+=54894796 echo 0 1>D:\GIS-D-Tapes-05.txt_summary.txt
Missing operator.

usw.

Was mache ich hier falsch ?

Danke und viele Grüße
Bitte warten ..
Mitglied: bastla
05.06.2009 um 16:11 Uhr
Hallo Bobbel323!

Wenn Du oberhalb des Batch-Listings auf "Quelltext" klickst, kannst Du den von mir geposteten Code (fast - am Ende jeder Zeile hängt gern mal ein zusätzliches Leerzeichen) 1:1kopieren - dann sollte es auch nicht passieren, dass die Zeile 10 und 11 (bzw jetzt neu Zeilen 12 und 13) zu einer einzigen Zeile werden ...
Ich habe oben noch zwei kleine Details eingearbeitet (die allerdings nichts mit dem von Dir angesprochenen Problem zu tun haben).

Grüße
bastla
Bitte warten ..
Mitglied: Bobbel323
08.06.2009 um 11:17 Uhr
Hallo Bastla,

vielen Dank für deine Hilfe, funktioniert jetzt alles bestens.

Leider bin ich jetzt an der von dir erwähnten Problematik angelangt:

(positive) Zahlen über 2147483647 (2^31 - 1) kannst Du per CMD-Artihmetik mit "set /a" nicht verarbeiten ...

Muss also etwas umdenken und evtl. doch noch etwas mit VB arbeiten

Grüße
Bitte warten ..
Mitglied: bastla
08.06.2009 um 20:31 Uhr
Hallo Bobbel323!

Sofern Du mit etwas Ungenauigkeit leben kannst, wäre etwa folgende Vorgangsweise möglich:
for /f "usebackq skip=1 tokens=2" %%i in ("%FILENAME%") do set /a Summe+=%%i/1024
Bei der Division erhältst Du als Ergebnis immer nur den ganzzahligen Anteil, die Reste fallen unter den Tisch ...

Grüße
bastla

P.S.: Was ist so schlimm an VB(S)?
Bitte warten ..
Mitglied: Landstreicher
19.01.2012 um 11:50 Uhr
Ich weiss, das Thema ist alt ... aber schaut mal was passiert wenn man eine zu große Zahl setzt ...

D:\>set /a summe=2147483647
2147483647
D:\>set /a summe=2147483648
-2147483648

genau, es wird negativ und damit funktioniert die "Rechnung" nicht mehr ...

jemand eine Lösung parat ?

gruß Landstreicher
Bitte warten ..
Mitglied: bastla
19.01.2012 um 12:31 Uhr
Hallo Landstreicher!
jemand eine Lösung parat ?
In der CMD-Shell sind direkte Berechnungen nur mit Werten zwischen -2^31 und +2^31-1 möglich - daher ggf auf eine andere Sprache (zB VBS) ausweichen ...

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Zahlen in Batch addieren...
gelöst Frage von Hans87Batch & Shell2 Kommentare

Hallo, ich habe ein batch skript geschrieben, das zwei SQL Abfragen ausführt. Beide geben Werte zurück. Die zurückgegebenen Werte ...

Batch & Shell
Mit Batch in Bestimmter Zeilennummer Wert zu Zahl addieren
gelöst Frage von SeppaeBatch & Shell23 Kommentare

Hallo alle miteinander! Ich habe folgende Aufgabenstellung bekommen und komme momentan einfach nicht weiter: Ich soll in einer .txt ...

Batch & Shell
In Batch Zählen
gelöst Frage von mavericklpBatch & Shell2 Kommentare

Guten Morgen zusammen, Ich habe ein kleines Problem mit einer Zählschleifer in der Batch Datei. Und zwar werden die ...

Batch & Shell
BATCH ini Datei Datei auslesen
gelöst Frage von Juergen42Batch & Shell2 Kommentare

Hallo zusammen, ich möchte eine ini Datei auslesen mit folgenden Aufbau INHALT DER INI ID=30 NAME="test1" PFAD="K:\Kontoauszug\Test1\*.pdf" PFAD_S="K:\Kontoauszug\Test1\Sicherung\" ID=28 ...

Neue Wissensbeiträge
Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 10 StundenInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Verschlüsselung & Zertifikate

19 Jahre alter Angriff auf TLS funktioniert immer noch

Information von BassFishFox vor 16 StundenVerschlüsselung & Zertifikate1 Kommentar

Interessant zu lesen. Der Bleichenbacher-Angriff gilt unter Kryptographen als Klassiker, trotzdem funktioniert er oft noch. Wie wir herausgefunden haben, ...

Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 1 TagWindows 104 Kommentare

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 1 TagSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Von rj11 auf rj45
Frage von jensgebkenLAN, WAN, Wireless19 Kommentare

Hallo Gemeinschaft, könnt ihr mir vielleicht bei der anfertigung eines Kabels helfen - habe ein rj 11 stecker und ...

Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

Netzwerkmanagement
NAS über zwei weitere Ethernet Anschlüsse verbinden
gelöst Frage von Sibelius001Netzwerkmanagement17 Kommentare

Sorry - ich bin hier wahrscheinlich als kompetter IT Trottel unterwegs. Aber eventuell kann mir jemand ganz einfach helfen: ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...