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

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

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst BATCH ini Datei Datei auslesen (2)

Frage von Juergen42 zum Thema Batch & Shell ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
Neuere Datei per Batch ausfinding machen (2)

Frage von chattie zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...