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, 7111 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 datei ausführen für einen anderen Rechner

gelöst Frage von TutterBatch & Shell3 Kommentare

Hallo an alle, ich möchte gern einen batchbefehl auf einen Rechner ausführen. Das muss aber ein anderer Anstoßen. Um ...

Batch & Shell

Rechnen mit Variablen - Batch Programmierung

gelöst Frage von LH.AppsBatch & Shell7 Kommentare

Bei folgendem Code gibt er immer mehrere Ergebnisse oder "ECHO ist ausgeschaltet (OFF)." aus: Optimierungsvorschläge? PS: Für die Variable ...

Windows 10

Mit einer batch Datei etwas in eine andere batch Datei schreiben und ausführen

Frage von RaphaelStockWindows 105 Kommentare

Hey Administratoren!! Ich habe ein Problem: Ich möchte alle 40 sek etwas in eine batch Datei schreiben und ausführen ...

Batch & Shell

Batch datei für shutdown von 3x win8.1 basic Rechnern ohne direkten Steuerbefehl!!??

gelöst Frage von TheCollecterBatch & Shell7 Kommentare

Hallo Computerfreunde und Problemlöser!! Ich wende mich an euch aus folgendem Problem heraus: Ich habe in den letzten 12 ...

Neue Wissensbeiträge
Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 5 StundenInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Erkennung und -Abwehr

Ups: Einfaches Nullzeichen hebelte den Anti-Malware-Schutzt in Windows 10 aus

Information von kgborn vor 17 StundenErkennung und -Abwehr

Windows 10 ist das sicherste Windows aller Zeiten, wie Microsoft betont. Insidern ist aber klar, das es da Lücken, ...

Windows 10

Windows 10 on ARM: von Microsoft entfernte Info - Klartext, was nicht geht

Information von kgborn vor 19 StundenWindows 10

Windows 10 on ARM ist ja eine neue Variante, die Microsoft im Verbund mit Geräteherstellern am Markt etablieren will. ...

Microsoft
TV-Tipp: Das Microsoft-Dilemma
Information von kgborn vor 19 StundenMicrosoft12 Kommentare

Aktuell gibt es in Behörden und in Firmen eine fatale Abhängigkeit von Microsoft und dessen Produkten. Planlos agieren die ...

Heiß diskutierte Inhalte
Server
Route-Befehl Unterstützung (unter CMD)
gelöst Frage von FKRR56Server34 Kommentare

Guten Tag , i.M. habe ich Probleme über den CMD-Route-Befehl ein Routing auf einen entfernten Server zuzulassen. Der Server ...

Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1026 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

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

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

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

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