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 Rechnen in Batch-Dateien

Mitglied: Howard

Howard (Level 1) - Jetzt verbinden

15.04.2010, aktualisiert 16.04.2010, 7375 Aufrufe, 6 Kommentare

Hallo zusammen,

ich bin neu hier. Nach 3-tägiger Suche nach einer Lösung, bin ich nun hier gelandet und hoffe, dass mir ein Profi weiterhelfen kann.

Folgendes Problem:

Ich möchte in einer kleinen Batch Datei Daten aus einer automatisch generierten .csv Datei auslesen, selektieren und dann wieder in einer .txt-Datei abspeichern. Soweit bin ich schon. Nun die Frage: Kann ich mit einem Wert (Zahl, Integer), welchen ich aus der .csv Datei ausgelesen habe in der Batch-Datei auch rechnen, ihn z.B. mal 0,66 nehmen (oder auch *2/3)?

Hintergrund: Die in der .csv Datei abgelegten Zahlenwerte sind hochrechenbar (eben mit dem angegebenen, festen Faktor). Diese hochgerechnete Zahl benötige ich dann zusätzlich als Ausgabe in der .txt-Datei.

Hier mein bisheriger Code:


01.
echo on
02.

03.
for /F "tokens=1-4 delims=. " %%a in ('date/T') do set DATE=%%c%%b%%a
04.
for /F "tokens=1-4 delims=. " %%a in ('date/T') do set DATE2=%%d%%c%%b
05.
set /A TODAY = DATE
06.
set /A YYYYMM = DATE2
07.

08.
set PLANTNAME=MeinePV-Anlage1
09.
SET FILENAM=%PLANTNAME%-%TODAY%.csv
10.
SET FILENAM2=%PLANTNAME%-%YYYYMM%.csv
11.

12.
for /F "skip=9 tokens=1,4,5 delims=;, " %%a in (%FILENAM2%) do ( 
13.
echo mo[mx++]="%%a|%%b%%c" >> ausgabe.txt
14.
)
15.
@echo off

Und so sieht der Inhalt der .csv-Datei aus:

01.
sep=;
02.
Version CSV1|Tool SE|Linebreaks CR/LF|Delimiter semicolon|Decimalpoint comma|Precision 3
03.

04.
;SN: 2100169189;SN: 2100169189
05.
;SB 4000TL-20;SB 4000TL-20
06.
;2100169189;2100169189
07.
;Gesamtertrag;Tagesertrag
08.
;Counter;Analog
09.
dd.MM.yyyy;kWh;kWh
10.
01.04.2010;224,843;10,865
11.
02.04.2010;243,803;18,960
12.
03.04.2010;252,476;8,673
13.
04.04.2010;258,248;5,772
14.
05.04.2010;268,377;10,129
15.
06.04.2010;291,971;23,594
16.
07.04.2010;314,708;22,737
17.
08.04.2010;318,738;4,030
18.
09.04.2010;323,915;5,177
19.
10.04.2010;338,523;14,608
Das ist der Inhalt der momentanen ausgabe.txt:

01.
mo[mx++]="01.04.2010|10865" 
02.
mo[mx++]="02.04.2010|18960" 
03.
mo[mx++]="03.04.2010|8673" 
04.
mo[mx++]="04.04.2010|5772" 
05.
mo[mx++]="05.04.2010|10129" 
06.
mo[mx++]="06.04.2010|23594" 
07.
mo[mx++]="07.04.2010|22737" 
08.
mo[mx++]="08.04.2010|4030" 
09.
mo[mx++]="09.04.2010|5177" 
10.
mo[mx++]="10.04.2010|14608" 
und so soll es eingentlich aussehen:

01.
mo[mx++]="01.04.2010|10865|7243" 
02.
mo[mx++]="02.04.2010|18960|12639" 
03.
mo[mx++]="03.04.2010|8673|5781" 
04.
mo[mx++]="04.04.2010|5772|3847" 
05.
mo[mx++]="05.04.2010|10129|6752" 
06.
mo[mx++]="06.04.2010|23594|15729" 
07.
mo[mx++]="07.04.2010|22737|15157" 
08.
mo[mx++]="08.04.2010|4030|2686" 
09.
mo[mx++]="09.04.2010|5177|3451" 
10.
mo[mx++]="10.04.2010|14608|9738" 
Die Rundung bei der zweiten Zahl ist nicht kritisch. Ohne runden geht auch OK.

Trotz das ich die letzten drei Tage alle erdenkliche Literatur zum Thema Batch-Programmierung (u.a. von Biber, Workshop for runaways usw.) gelesen habe, komm' ich nicht auf die Lösung. Ich kann z.B. nicht erfolgreich die %%b%%c in eine andere Variable überführen z.B. va=%%b%%c und va dann weiter zum Rechnen verwenden. Das klappt nicht bzw jeweils pro Batch-Durchlauf nur ein einziges Mal (und zwar immer nur mit der letzten Zahl in der Tabelle).

Bitte helft mir, ich will nicht dumm sterben!

Vielen Dank!

Gruß

Howard
Mitglied: bastla
15.04.2010 um 14:43 Uhr
Hallo Howard und willkommen im Forum!

Meintest Du das so?
01.
@echo on & setlocal
02.

03.
for /F "tokens=1-4 delims=. " %%a in ('date/T') do set "TODAY=%%c%%b%%a"
04.
for /F "tokens=1-4 delims=. " %%a in ('date/T') do set "YYYYMM=%%d%%c%%b"
05.

06.
set "PLANTNAME=MeinePV-Anlage1"
07.
set "FILENAM=%PLANTNAME%-%TODAY%.csv"
08.
set "FILENAM2=%PLANTNAME%-%YYYYMM%.csv"
09.

10.
del ausgabe.txt 2>nul
11.

12.
for /F "skip=9 tokens=1,4,5 delims=;, " %%a in (%FILENAM2%) do call :ProcessLine "%%a" "%%b%%c"
13.
goto :eof
14.

15.
:ProcessLine
16.
set /a "Erg=%~2*2/3"
17.
>>ausgabe.txt echo mo[mx++]="%~1|%~2|%Erg%"
18.
goto :eof
Grüße
bastla

[Edit] @LotPings: "DATE" hatte ich doch glatt übersehen - ist jetzt angepasst ... [/Edit]
Bitte warten ..
Mitglied: LotPings
15.04.2010 um 14:44 Uhr
Hallo Howard,

ich glaube du willst zuviel auf einmal

Ein paar Anmerkungen:
  • Die Variable date ist eine Systemvariable, die solltest du nicht überschreiben.
  • Wenn du einer Variable den "Inhalt" einer anderen Variablen zuweisen willst musst du den Namen in %-Zeichen (oder bei delayedExpansion in !-Zeichen) einfassen.
  • Beim Set-Befehl werden die Leerzeichen vor und nach dem Gleichheitszeichen Bestandteil des Names/des Inhalts - also weglassen!
  • Mit set /a kannst du rechnen aber nur Integer-Arithmetik mit 32Bit inkl.. Vorzeichen.
  • Wenn du rechnest innerhalb einer Schleife wirst du DelayedExpansion oder Subroutinen einsetzen müssen.
  • Ist gewährleistet das der Nachkommateil der kWh immer 3 Stellig ist?
  • Beim Rechnen in batches ist zu beachten das führende Nullen (leider) immer als Oktal-Prefix betrachtet werden.

Zeile 13 muss also in jedem Fall überarbeitet werden, das schau ich mir gleich mal im Detail an.

Gruß
LotPings

Edit: @bastla wenn man schneller ist, übersieht man eben schonmal etwas
Bitte warten ..
Mitglied: Howard
15.04.2010 um 15:22 Uhr
Hallo ihr beiden,

ich kann nur sagen: Ich doof!

Warum frage ich nicht gleich Leute wie euch, die es können. Vielen vielen Dank!

Das ist genau die Lösung, die ich gesucht habe. Jetzt kann ich in Zukunft die Statistik meiner PV-Anlage endlich automatisiert erfassen.

DANKE!

Gruß

Howard
Bitte warten ..
Mitglied: Howard
16.04.2010 um 08:50 Uhr
Hallo Bastla und LotPings,

könnt' ihr mir bitte noch einen Tipp geben, wie ich die Ergebnisliste chronologisch sortiert ausgeben kann (das neuste Datum soll an der ersten Stelle stehen)?

Vielen Dank!

Gruß

Howard
Bitte warten ..
Mitglied: LotPings
16.04.2010 um 09:13 Uhr
Moin Howard,

dafür brauhst du das Datum in sortierfähiger Form YYYYMMDD in einer Hilfsspalte,
Datei mit Sort /R absteigend sortieren und Hilfspalte wieder entfernen.

ungetestet:
01.
@echo on & setlocal
02.

03.
for /F "tokens=1-4 delims=. " %%a in ('date/T') do set "TODAY=%%c%%b%%a"
04.
for /F "tokens=1-4 delims=. " %%a in ('date/T') do set "YYYYMM=%%d%%c%%b"
05.

06.
set "PLANTNAME=MeinePV-Anlage1"
07.
set "FILENAM=%PLANTNAME%-%TODAY%.csv"
08.
set "FILENAM2=%PLANTNAME%-%YYYYMM%.csv"
09.

10.
del ausgabe.txt 2>nul
11.
Del unsort.txt 2>nul
12.

13.
for /F "skip=9 tokens=1,4,5 delims=;, " %%a in (%FILENAM2%) do call :ProcessLine "%%a" "%%b%%c"
14.
For /f "tokens=1,* delims=#" %%a in ('Sort /r unsort.txt') do >>ausgabe.txt Echo.%%b
15.
goto :eof
16.

17.
:ProcessLine
18.
set /a "Erg=%~2*2/3"
19.
set Datum=%~1
20.
>>unsort.txt echo %Datum:~6,4%%Datum:~3,2%%Datum:~,2%#mo[mx++]="%~1|%~2|%Erg%"
21.
goto :eof
Gruß
LotPngs
Bitte warten ..
Mitglied: Howard
16.04.2010 um 09:33 Uhr
Hallo LotPings,

noch einmal, vielen vielen Dank für die sehr schnellen und perfekten Lösungen hier. Das ist doch fast schon ein bisschen ein Wettbewerb zwischen den Gurus hier, oder? Wer die beste Lösung am schnellsten präsentiert, gewinnt. Das habe ich in solch einer Form noch nie in einem Forum erlebt. Weiter so!

Danke!

Gruß

Howard
Bitte warten ..
Ähnliche Inhalte
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 ...

Batch & Shell
Batch Datei Ordnerüberwachung
Frage von Phant0xBatch & Shell1 Kommentar

Hallo zusammen, könntet ihr mir helfen eine Batch Datei zu schreiben, die einen bestimmten Ordner kontrolliert, ob sich Dateien ...

Batch & Shell
Batch-Datei erstellen
gelöst Frage von tocksickBatch & Shell2 Kommentare

Hallo liebe Gemeinde! Ich bin dabei eine Batch-Datei zu schreiben welche folgendes tun soll: Die Batch soll alle auf ...

Batch & Shell
Batch Datei Kopieren
gelöst Frage von FragerBatch & Shell17 Kommentare

Hallo Zusammen, ich bekomme es nicht hin ich muss aus einem Ordner (liegt auf einem Server) eine von vielen ...

Neue Wissensbeiträge
Windows 7
Updategängelung auf Windows 10, die zweite
Information von Penny.Cilin vor 8 StundenWindows 7

Hallo, da Windows 7 im kommenden Jahr nicht mehr supportet wird, werden Nutzer von Window 7 home premium wieder ...

Internet
EU-Urheberrechtsreform: Zusammenfassung
Information von Frank vor 2 TagenInternet1 Kommentar

Auf golem.de gibt es eine Analyse von Friedhelm Greis, der das Thema EU-Urheberrechtsreform gut und strukturiert zusammenfasst. Zwar haben ...

Microsoft Office

Office365 Schwachstellen bei Sicherheit und Datenschutz

Information von Penny.Cilin vor 3 TagenMicrosoft Office7 Kommentare

Auf Heise+ gibt es einen Artikel bzgl. Office365 Schwachstellen. Das ist noch ein Grund mehr seine Daten nicht in ...

Sicherheit
Schwachstellen in VPN Clients
Tipp von transocean vor 5 TagenSicherheit2 Kommentare

Moin, es gibt Sicherheitslücken bei VPN Clients namhafter Hersteller, wie man hier lesen kann. Gruß Uwe

Heiß diskutierte Inhalte
Vmware
Richtige Einstellungen beim ESXI 6.5 in Sachen CPU Zuweisung bei einer VM
gelöst Frage von zeroblue2005Vmware14 Kommentare

Hallo Zusammen, heute wollte ich mal fragen, wie ich eine VM die richtige Anzahl der von CPUs zuweise. Bin ...

Vmware
ESXI hebt Registrierung von Masschinen auf
Frage von SpitzbubeVmware12 Kommentare

Hallo, nutze seit einiger Zeit für meine IT Projekte einen alten HP G7 Server mit ESXi 6.5 und einem ...

Entwicklung
Programmieren lernen - Vorkenntnisse bisher nur in PowerShell
gelöst Frage von SomebodyToLoveEntwicklung10 Kommentare

Hallo zusammen, ich würde gerne tiefer in das Programmieren einsteigen, der Wunsch hängt mir schon im Kopf seid ich ...

Hyper-V
Chaosbeseitigung in Domainlandschaft
Frage von Rolf935Hyper-V10 Kommentare

Hallo zusammen, ich hätte gerne mal ein paar praktische Tipps oder Hinweise. Derzeit haben wir einen NAS als Fileserver ...