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

Mehrere TXT-Files Zeilenweise auslesen, zusammensetzen und in CSV datei schreiben

Frage Entwicklung Batch & Shell

Mitglied: Landstreicher

Landstreicher (Level 1) - Jetzt verbinden

09.11.2011, aktualisiert 18.10.2012, 5418 Aufrufe, 23 Kommentare

Hallo,

Vorweg .. ich habe leider keine passende Lösung im Forum gefunden!

Also ich möchte gern mittels Batch mehrere TXT Files Zeilenweise auslesen welche so aussehen:

11/09/2011 00:00 2
11/09/2011 00:10 1
11/09/2011 00:20 4
11/09/2011 00:30 3
11/09/2011 00:40 2
11/09/2011 00:50 1
11/09/2011 01:00 2
11/09/2011 01:10 9
11/09/2011 01:20 1
11/09/2011 01:30 1
11/09/2011 01:40 0
11/09/2011 01:50 0
11/09/2011 02:00 2
11/09/2011 02:10 2
11/09/2011 02:20 1

11/09/2011 00:00 10
11/09/2011 00:10 15
11/09/2011 00:20 9
11/09/2011 00:30 13
11/09/2011 00:40 5
11/09/2011 00:50 4
11/09/2011 01:00 10
11/09/2011 01:10 9
11/09/2011 01:20 7
11/09/2011 01:30 10
11/09/2011 01:40 13
11/09/2011 01:50 12
11/09/2011 02:00 8
11/09/2011 02:10 6
11/09/2011 02:20 7

So kann ich zwar den Wert den ich brauche auslesen, aber nicht in dem Format schreiben, welches ich benötige
for /F "tokens=1-10 delims=<> " %%i in (D:\Charts\quelle\Datei1) do echo %%l
for /F "tokens=1-10 delims=<> " %%i in (D:\Charts\quelle\Datei2) do echo %%l
for /F "tokens=1-10 delims=<> " %%i in (D:\Charts\quelle\Datei3) do echo %%l
for /F "tokens=1-10 delims=<> " %%i in (D:\Charts\quelle\datei4) do echo %%l
for /F "tokens=1-10 delims=<> " %%i in (D:\Charts\quelle\datei5) do echo %%l
for /F "tokens=1-10 delims=<> " %%i in (D:\Charts\quelle\datei6) do echo %%l

diese ausgelesenen Werte, die nun aus verschiedenen TXT - Files kommen, will ich pro Uhrzeit in eine Zeile in einer CSV Datei schreiben. bsp:
(an erster Stelle hinter der Uhrzeit steht der Wert der ersten Datei, dann die zweite Datei, ect ...
19.10.2011 00:00;2;10;2;3;0;1;7;1;3;
19.10.2011 00:10;1;15;2;5;1;0;9;2;11;
19.10.2011 00:20;4;9;0;2;1;2;2;11;5;
19.10.2011 00:30;3;13;1;0;0;1;57;8;15;
19.10.2011 00:40;2;5;0;1;2;1;2;1;1;
19.10.2011 00:50;1;4;0;0;1;4;17;2;2;
19.10.2011 01:00;2;10;1;7;1;1;8;1;1;
19.10.2011 01:10;9;9;0;0;0;1;1;2;2;
19.10.2011 01:20;1;7;0;3;1;0;4;1;9;
19.10.2011 01:30;1;10;0;2;0;0;1;5;2;
19.10.2011 01:40;0;13;0;0;1;0;1;1;1;
19.10.2011 01:50;0;12;2;0;2;0;4;6;2;
19.10.2011 02:00;2;8;0;1;0;2;1;2;3;
19.10.2011 02:10;2;6;0;1;0;1;1;1;1;
19.10.2011 02:20;1;7;1;3;1;1;1;7;1;

Irgendwie bekomme ich es nicht hin, das er die Werte dementsprechend ausliest und sie richtig in die CSV - Datei schreibt.
jemand eine Idee ?

gruß Landstreicher
Mitglied: Jochem
09.11.2011 um 14:59 Uhr
Moin,

nach dem ersten Drübergucken: Kann so nicht funktionieren!

11/09/2011 00:00 2

for /F "tokens=1-10 delims=<> " %%i in (D:\Charts\quelle\Datei1) do echo %%l

- Wo sind da 10 tokens?
- wo sind in der Eingabedatei die Delimiter <> ?
- wieso wird nur %%l ausgegeben?
- wo soll den das Ergebnis von "do echo %%l" hingeschrieben werden?
- wo bleibt beim "echo" der Trenner "," der zu erzeugenden CSV-Datei?
- was soll mit der CSV-Datei weiter passieren (Import nach Excel?)?

Vorschlag:
- lies Dir nochmal den Hilfetext zum "FOR-Befehl" durch und ändere danach Dein Script.
- bau Dir aus den n Ausgangsdateien entsprechende CSV-Dateien
- Importiere diese dann der Reihe nach in eine Excel-Datei mit n Tabellenblättern
- Erstelle dann ein Summenblatt mit den Angaben aus Tabelle-1 bis Tabelle-n
- Zur Not kannst Du dieses Summenbaltt als CSV-Datei exportieren

Alternative:
Du kannst mal austesten, inwieweit sich der FOR-Befehl verschachteln läßt, so daß nach dem Abarbeiten der ersten Datei aus den Folgedateien nur noch der benötigte Wert ausgelesen und weiterverarbeitet wird.

Gruß J chem
Bitte warten ..
Mitglied: Jochem
09.11.2011 um 15:00 Uhr
Sorry, Doppelpost .
Bitte warten ..
Mitglied: Landstreicher
09.11.2011 um 15:30 Uhr
Naja, ich bitte ja hier um "Hilfe" und nicht um "helfe dir selbst"

Hätte ich den Nerv und die Zeit sowie das Verständnis, würde ich mir die Hilfe bis in den entlegensten Winkel durchlesen, leider ist dem nicht so.
Ich kann mir gut vorstellen, das es nur ein Einzeiler ist der hier zur Lösung meines Problems führen könnte.

also, kannst du mir dabei helfen ? ;)
Bitte warten ..
Mitglied: Jochem
09.11.2011 um 16:04 Uhr
Moin,

Hätte ich den Nerv und die Zeit sowie das Verständnis....

Tja, am Verständnis kann man was tun: Lesen bildet, hatte ich ja schon vorgeschlagen.

Zu den anderen beiden Punkten: Du hast weder Nerv noch Zeit, aber ich soll Zeit und Nerven einbringen, um Dir eine mundgerechte Lösung (evtl. Einzeiler) zu liefern, die Du nur noch "schlucken" mußt? Nicht wirklich, oder?

Für mich daher hier EOD.

Gruß J chem
Bitte warten ..
Mitglied: 60730
09.11.2011, aktualisiert 18.10.2012
Moinsen,

Zitat von Landstreicher:
Naja, ich bitte ja hier um "Hilfe" und nicht um "helfe dir selbst"

naja - aber ganz ehrlich sowas findet man aber wirklich relativ schnell und vielleicht fällt dir auf den ersten Blick was auf.
Mal ganz unten, die letzte Zeile studieren

Gruß
Bitte warten ..
Mitglied: pieh-ejdsch
10.11.2011 um 17:11 Uhr
moin,

als CMD-OneLiner geht es vllt so
01.
>nul 3>"D:\Neue.CSV" (for /f usebackqtokens^=1-3 %i in ("D:\Datei A.txt") do (set "line=" & for %a in ("D:\Datei B.txt" "C:\Datei C.txt") do for /f tokens^=3 %m in (' findstr /b /c:"%i %j" %a ') do if defined Line (call set "Line=%Line%;%m") else set "line=;%m" )&& >&3 call echo %i %j;%k%Line%)&set "line="
Gruß Phil
Bitte warten ..
Mitglied: Landstreicher
11.11.2011 um 11:41 Uhr
danke erstmal Phil, aber sorry, ich komm damit echt nicht klar


also ich hab das jetzt noch mal etwas geändert ...

for /F "tokens=1-4" %%a in (D:\Charts\quelle\CPU_Q4DE8NCOJ23_20111109) do echo DKS >>D:\test.csv
for /F "tokens=1-4" %%a in (D:\Charts\quelle\CPU_Q4DE8NCOJ23_20111109) do echo ;%%b %%c>>D:\test.csv
for /F "tokens=1-4" %%a in (D:\Charts\quelle\CPU_Q4DE8NCOJ23_20111109) do echo ;;%%d>>D:\test.csv
for /F "tokens=1-4" %%a in (D:\Charts\quelle\CPU_Q4DE8NCOJ24_20111109) do echo ;;;%%d;>>D:\test.csv

soweit schreibt er zwar alles in eine Datei, nur eben untereinander anstatt das ausgelesen von der 2ten Datei dahinter zu schreiben ...

eigentlich brauche ich ja nur ne Lösung, wie ich alle folgedaten dahinter statt drunter bekomme

PS: ja ich bin kein Profi , nennt mich noob

mfg
Bitte warten ..
Mitglied: Landstreicher
11.11.2011, aktualisiert 18.10.2012
Zitat von 60730:
Moinsen,

> Zitat von Landstreicher:
> ----
> Naja, ich bitte ja hier um "Hilfe" und nicht um "helfe dir selbst"

naja - aber ganz ehrlich sowas findet man aber wirklich relativ
schnell und vielleicht fällt dir auf den ersten Blick was auf.
Mal ganz unten, die letzte Zeile studieren

Gruß

wenn du dich auf "Problem gelöst" und keine Lösung geschrieben beziehen solltest? ....
sprich es ruhig aus .. ich hatte so meine Gründe.
Bitte warten ..
Mitglied: Landstreicher
11.11.2011 um 12:25 Uhr
Zitat von Jochem:
Moin,

> Hätte ich den Nerv und die Zeit sowie das Verständnis....

Tja, am Verständnis kann man was tun: Lesen bildet, hatte ich ja schon vorgeschlagen.

Zu den anderen beiden Punkten: Du hast weder Nerv noch Zeit, aber ich soll Zeit und Nerven einbringen, um Dir eine mundgerechte
Lösung (evtl. Einzeiler) zu liefern, die Du nur noch "schlucken" mußt? Nicht wirklich, oder?

Für mich daher hier EOD.

Gruß J chem

zu deinen beiden Punkten
a) kurz, ich verstehe es nicht .
b) doch, ich dachte das ist ein Forum in dem man hilfe bekommt und nicht die "hilfe" zur hilfe

was deine Vorschläge angeht, so habe ich alle durch und sie haben mir leider in diesem Fall nichts gebracht.
In excel dateien einlesen ect. kein ding, da sich aber der Dateinamen (datum) täglich ändert und ich die Quelldateien so belassen muss und ich auch hier nicht weiss wie ich das dort am besten einbaue, komme ich auch mit excel nicht weiter.

mfg Landstreicher
Bitte warten ..
Mitglied: pieh-ejdsch
11.11.2011 um 14:16 Uhr
moin Landstreicher,

in dem Einzeiler sind Dateinamen: "D:\Neue.CSV"; "D:\Datei A.txt"; "D:\Datei B.txt"; "C:\Datei C.txt"

Die csv steht für die Ausgabedatei.
Die txt der 1.ForSchleife gibt die Zeilenanfänge vor (11/09/2011 00:00).
In der 2. ForSchleife stehen die restlichen txt-Files, welche der dritten Forschleife zum herausfummeln der Werte übergeben werden. Die Variable Line wird mit dem call mit ihrem eigenen Wert und dem jeweilig hinzuzufügenden Herausgefummelten Wert ergänzt. Wenn alle Dateien der zweiten FOR durch sind wird die Variable Line mit dem call echo ausgegeben und wird ins dritte Handle geschrieben, welches in die CSV geschrieben wird. Dann gehts mit der nächsten Zeile der TXT der 1.FOR weiter. usw..

um dies in eine Batch zu Übertragen/aufzudröseln musst Du alle Prozentzeichen (dieses Onliners) Verdoppeln.

Gruß Phil
Bitte warten ..
Mitglied: pieh-ejdsch
11.11.2011 um 22:35 Uhr
Ohne die Call, Sub oder delayedexpansion sähe das ganze in etwa so aus.

01.
@echo off &setlocal 
02.
 
03.
set inDatei1="D:\Datei1.txt" 
04.
set inDateiNext="D:\Datei2.txt" "D:\Datei3.txt" "D:\Datei4.txt" 
05.
set Output=3^>"D:\Output.csv" 
06.
 
07.
%Output% >nul <nul ( 
08.
	for /f usebackqtokens^=1-3 %i in (%inDatei1%) do ( 
09.
		 >&3 set/p="%i %j;%k" 
10.
		for %a in (%inDateiNext%) do for /f tokens^=3 %m in (' findstr /b /c:"%i %j" %a ') do >&3 set/p=";%m" 
11.
		 >&3 echo( 
12.
)	)
Gruß Phil
Bitte warten ..
Mitglied: Landstreicher
14.11.2011 um 12:29 Uhr
Hi,

danke erstmal .. habs auch gleich mal getestet. Leider meckert er hier das erste "do" an:
do for /f tokens^=3 %m in (' findstr /b /c:"%i %j" %a ') do >&3 set/p=";%m"

..."do" ist syntaktisch an dieser Stelle nicht verarbeitbar.

ne idee was falsch ist ?
Bitte warten ..
Mitglied: bastla
16.11.2011 um 20:23 Uhr
Hallo Landstreicher!

Da das ja ein Batch sein soll, müssen alle Laufvariablen (also zB "%i") mit zwei Prozentzeichen geschrieben werden ...
Eine etwas flexiblere Variante sähe übrigens etwa so aus:
01.
@echo off &setlocal 
02.
set "Ordner=D:\" 
03.
set "inDatei=Datei*.txt" & set "inDatei1=" 
04.
set Output=3^>"Output.csv" 
05.
 
06.
pushd "%Ordner%" 
07.
del "%Output%" 2>nul 
08.
for /f "delims=" %%i in ('dir /b /on "%inDatei%"') do if not defined inDatei1 set "inDatei1=%%i" 
09.
if not defined inDatei1 echo Keine passende Datei gefunden! & goto :eof 
10.
 
11.
%Output% >nul <nul ( 
12.
	for /f usebackqtokens^=1-3 %%i in (%inDatei1%) do ( 
13.
		 >&3 set/p="%%i %%j;%%k" 
14.
		for /f "skip=1 delims=" %%a in ('dir /b /on "%inDatei%"') do for /f tokens^=3 %%m in (' findstr /b /c:"%%i %%j" %%a ') do >&3 set/p=";%%m" 
15.
		 >&3 echo( 
16.
)	) 
17.
popd
Hier genügt es, den Ordner und die Dateimaske anzugeben ...

Grüße
bastla
Bitte warten ..
Mitglied: Landstreicher
17.11.2011 um 13:44 Uhr
Hallo Bastla,

danke erstmal.

folgene Probleme hab ich noch.

1) er liesst mir leider nur eine Datei aus (die erste) und nicht alle Dateien die in dem Ordner liegen. bzw. schreibt diese in die Output-Datei.
so findet er bsp: (echo on)

D:\Charts\quelle>for /F "delims=" %i in ('dir /b /on "CPU_Q4DE8NCO*"') do if not defined inDatei1 set "inDatei1=%i"

D:\Charts\quelle>if not defined inDatei1 set "inDatei1=CPU_Q4DE8NCOJ23_20111109"

D:\Charts\quelle>if not defined inDatei1 set "inDatei1=CPU_Q4DE8NCOJ24_20111109"

D:\Charts\quelle>if not defined inDatei1 set "inDatei1=CPU_Q4DE8NCOJ25_20111109"

D:\Charts\quelle>if not defined inDatei1 set "inDatei1=CPU_Q4DE8NCOJ26_20111109"

D:\Charts\quelle>if not defined inDatei1 set "inDatei1=CPU_Q4DE8NCOJ27_20111109"

D:\Charts\quelle>if not defined inDatei1 set "inDatei1=CPU_Q4DE8NCOJ28_20111109"

D:\Charts\quelle>if not defined inDatei1 set "inDatei1=CPU_Q4DE8NCOU29_20111109"

D:\Charts\quelle>if not defined inDatei1 set "inDatei1=CPU_Q4DE8NCOU30_20111109"

D:\Charts\quelle>if not defined inDatei1 set "inDatei1=CPU_Q4DE8NCOU31_20111109"

D:\Charts\quelle>if not defined inDatei1 echo Keine passende Datei gefunden! & goto :eof

D:\Charts\quelle>(for /F usebackqtokens=1-4 %i in (CPU_Q4DE8NCOJ23_20111109) do (
set/p=";%j %k;%l" 1>&3
for /F "skip=1 delims=" %a in ('dir /b /on "CPU_Q4DE8NCO*"') do for /F tokens=3 %m in (' findstr /b /c:"%i %j" %a ') do set/p="
echo( 1>&3
) ) 3>aktuell_win.csv 1>nul 0<nul


2) in die erste Zeile der CSV-Datei muss rein
SID;Datum/Zeit;Q4DE8NCOJ23;Q4DE8NCOJ24;Q4DE8NCOJ25;Q4DE8NCOJ26;Q4DE8NCOJ27;Q4DE8NCOJ28;Q4DE8NCOU29;Q4DE8NCOU30;Q4DE8NCOU31;
.. und in der ersten Spalte dann unter SID, "ABC"


das "ENDPRODUKT" sollte dann so aussehen:

SID;Datum/Zeit;Q4DE8NCOJ23;Q4DE8NCOJ24;Q4DE8NCOJ25;Q4DE8NCOJ26;Q4DE8NCOJ27;Q4DE8NCOJ28;Q4DE8NCOU29;Q4DE8NCOU30;Q4DE8NCOU31
ABC;19.10.2011 00:00;6;10;2;3;0;1;7;1;3
ABC;19.10.2011 00:10;3;15;2;5;1;0;9;2;11
ABC;19.10.2011 00:20;1;9;0;2;1;2;2;11;5
ABC;19.10.2011 00:30;1;13;1;0;0;1;57;8;15
ABC;19.10.2011 00:40;0;5;0;1;2;1;2;1;1
ABC;19.10.2011 00:50;2;4;0;0;1;4;17;2;2
ABC;19.10.2011 01:00;2;10;1;7;1;1;8;1;1
ABC;19.10.2011 01:10;3;9;0;0;0;1;1;2;2
ABC;19.10.2011 01:20;0;7;0;3;1;0;4;1;9
ABC;19.10.2011 01:30;2;10;0;2;0;0;1;5;2
ABC;19.10.2011 01:40;0;13;0;0;1;0;1;1;1
ABC;19.10.2011 01:50;1;12;2;0;2;0;4;6;2
ABC;19.10.2011 02:00;2;8;0;1;0;2;1;2;3
ABC;19.10.2011 02:10;1;6;0;1;0;1;1;1;1
ABC;19.10.2011 02:20;0;7;1;3;1;1;1;7;1
ABC;19.10.2011 02:30;4;15;1;0;0;6;1;1;3
ABC;19.10.2011 02:40;5;9;0;2;0;0;3;11;2
ABC;19.10.2011 02:50;4;12;1;1;3;0;1;2;1
ABC;19.10.2011 03:00;3;7;0;0;0;1;18;3;33
ABC;19.10.2011 03:10;3;6;1;1;1;0;19;3;5
ABC;19.10.2011 03:20;3;10;0;1;0;0;3;2;1
ABC;19.10.2011 03:30;2;13;1;3;0;0;5;1;1
ABC;19.10.2011 03:40;0;4;0;1;0;0;11;1;1
ABC;19.10.2011 03:50;3;8;0;0;2;5;4;1;1
ABC;19.10.2011 04:00;2;4;0;1;0;2;1;7;1
ABC;19.10.2011 04:10;5;5;1;1;0;2;2;1;3
Bitte warten ..
Mitglied: 60730
17.11.2011 um 14:50 Uhr
moin,

er liesst mir leider nur eine Datei aus (die erste) und nicht alle Dateien die in dem Ordner liegen
 for /F "delims=" %i in ('dir /b /on "CPU_Q4DE8NCO*"') do if not defined inDatei1 set "inDatei1=%i"
Was will uns diese Zeilenkombination sagen? do if not defined?
Das Hilfe zur selbsthilfe auch etwas eigeninitiative voraussetzt?

Denk mal drüber nach, ist ganz einfach - du hast 2 Alternativen, wie du aus der Nummer herauskommst.

Gruß
Bitte warten ..
Mitglied: bastla
17.11.2011 um 14:59 Uhr
Hallo Landstreicher!

Da bei Deinem Test sowohl der Batch, als auch die Struktur der Datendateien (ist "ABC" im Ergebnis eigentlich eine Konstante?) verändert waren, solltest Du für beide den derzeitigen Stand posten ...

Übrigens sollte es Dich nicht wundern, dass
 for /F "skip=1 delims=" %a in ('dir /b /on "CPU_Q4DE8NCO*"') do for /F tokens=3 %m in (' findstr /b /c:"%i %j" %a ') do set/p="
keine Ausgabe der Werte aus den übrigen Dateien erzeugt ...

Grüße
bastla
Bitte warten ..
Mitglied: Landstreicher
18.11.2011 um 09:56 Uhr
Moin Bastla,

sorry hab wohl etwas verwirrung gestiftet ...

also ich fasse mal die Änderungen zusammen.

die Quelldateien liegen im Ordner
D:\Charts\quelle
und heissen CPU_Q4DE8NCOj23_(jeweiliges DaTUM) ohne .txt bsp:CPU_Q4DE8NCOJ23_20111118
CPU_Q4DE8NCOj24_(jeweiliges DaTUM)
CPU_Q4DE8NCOj25_(jeweiliges DaTUM)
CPU_Q4DE8NCOj26_(jeweiliges DaTUM)
CPU_Q4DE8NCOj27_(jeweiliges DaTUM)
CPU_Q4DE8NCOj28_(jeweiliges DaTUM)
CPU_Q4DE8NCOU29_(jeweiliges DaTUM)
CPU_Q4DE8NCOU30_(jeweiliges DaTUM)
CPU_Q4DE8NCOU31_(jeweiliges DaTUM)

und sehen jeweils so aus:
Servername Datum Uhrzeit CPU-Wert(Auslastung)
Q4DE8NCOJ23 11/09/2011 00:00 2
Q4DE8NCOJ23 11/09/2011 00:10 1
Q4DE8NCOJ23 11/09/2011 00:20 4
Q4DE8NCOJ23 11/09/2011 00:30 3
Q4DE8NCOJ23 11/09/2011 00:40 2
Q4DE8NCOJ23 11/09/2011 00:50 1
Q4DE8NCOJ23 11/09/2011 01:00 2
.
.
.


die Ausgabe sollte (muss aber nicht zwingend) im Ordner
D:\Charts\data
landen.
und so aussehen:
SID;Datum/Zeit;Q4DE8NCOJ23;Q4DE8NCOJ24;Q4DE8NCOJ25;Q4DE8NCOJ26;Q4DE8NCOJ27;Q4DE8NCOJ28;Q4DE8NCOU29;Q4DE8NCOU30;Q4DE8NCOU31
ABC;19.10.2011 00:00;6;10;2;3;0;1;7;1;3
ABC;19.10.2011 00:10;3;15;2;5;1;0;9;2;11
ABC;19.10.2011 00:20;1;9;0;2;1;2;2;11;5
ABC;19.10.2011 00:30;1;13;1;0;0;1;57;8;15
ABC;19.10.2011 00:40;0;5;0;1;2;1;2;1;1
ABC;19.10.2011 00:50;2;4;0;0;1;4;17;2;2

wobei sich im Normafall der Wert "ABC" sowie die erste Zeile nicht ändern.

die angepasste Batch sieht nun so aus:

@echo on &setlocal
REM
REM Setzen des Datums
REM
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set Cyear=%%c%%b%%a
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set DAY=%%a
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set MON=%%b
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set YEAR=%%c

set "Ordner=D:\Charts\quelle\"
set "inDatei=CPU_Q4DE8NCOJ23_%cyear%" & set "inDatei1="
set Output=3^>"aktuell_win.csv"

pushd "%Ordner%"

del "%Output%" 2>nul

for /f "delims=" %%i in ('dir /b /on "%inDatei%"') do if not defined inDatei1 set "inDatei1=%%i"
if not defined inDatei1 echo Keine passende Datei gefunden! & goto :eof
%Output% >nul <nul (



for /f usebackqtokens^=1-4 %%i in (%inDatei1%) do (



>&3 set/p=";%%j %%k;%%l"



for /f "skip=1 delims=" %%a in ('dir /b /on "%inDatei%"') do for /f tokens^=3 %%m in (' findstr /b /c:"%%j %%k" %%a ') do >&3 set/p=";%%m"



>&3 echo(



) )
popd

Ich gebs gern nochmal zu ... ich hab von batch soviel Ahnung wie vom Tischlern ... ich kann gerade so mit dem "Schleifpapier" umgehen, deswegen nehmts mir bitte nicht krumm wenn ich das ein oder andere ohne eine Erklärung nicht verstehe ;)
ggf. kann mir jemand die Zeilen etwas erklären ?
Bitte warten ..
Mitglied: bastla
18.11.2011 um 16:45 Uhr
Hallo Landstreicher!

Einem Tischler wirst Du aber auch die genauen Maße Deines geplanten Eckregals mitteilen müssen ...

Versuch es damit:
01.
@echo off &setlocal 
02.
for /f "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set "cyear=%%c%%b%%a" & set "DAY=%%a" & set "MON=%%b" & set "YEAR=%%c" 
03.
 
04.
set "Ordner=D:\Charts\quelle\" 
05.
set "inDatei=CPU_Q4DE8NCOJ*_%cyear%" & set "inDatei1=" 
06.
set Output=3^>"D:\Charts\data\aktuell_win.csv" 
07.
 
08.
pushd "%Ordner%" 
09.
del "%Output%" 2>nul 
10.
 
11.
for /f "delims=" %%i in ('dir /b /on "%inDatei%"') do if not defined inDatei1 set "inDatei1=%%i" 
12.
if not defined inDatei1 echo Keine passende Datei gefunden! & goto :eof 
13.
 
14.
%Output% <nul ( 
15.
    >&3 set/p="SID;Datum/Zeit" 
16.
    for /f "tokens=2 delims=_" %%d in ('dir /b /on "%inDatei%"') do >&3 set/p=";%%d" 
17.
    >&3 echo( 
18.
    for /f skip^=1usebackqtokens^=1-4 %%i in (%inDatei1%) do ( 
19.
        >&3 set/p="ABC;%%j %%k;%%l" 
20.
        for /f "skip=1 delims=" %%a in ('dir /b /on "%inDatei%"') do for /f tokens^=4 %%m in (' findstr /c:"%%j %%k" %%a ') do >&3 set/p=";%%m" 
21.
        >&3 echo( 
22.
) ) 
23.
popd
Kurze Erklärung (eigentlich wäre ja PH zuständig ):

In Zeile 5 ist der "*" wichtig - es sollen ja alle Dateien gefunden werden, die dem Muster "CPU_Q4DE8NCOJNummer_Datum" entsprechen.

In Zeile 8 wird in den Ordner mit den Quelldateien gewechselt - damit muss in weiterer Folge kein Pfad berücksichtigt werden.

Die Zeile 11 dient dazu, die erste Datei zu finden - aus dieser werden dann die Timestamps gelesen (und in allen anderen Dateien die dazu passenden Zeilen gesucht); diese Zeile könnte auch so aussehen:
for /f "delims=" %%i in ('dir /b /o-n "%inDatei%"') do set "inDatei1=%%i"
- in beiden Varianten geht es darum, eben nur die Datei mit der niedrigsten Nummer zu ermitteln.

Zeile 14 ist etwas knifflig - hier wird dafür gesorgt, dass die Ausgaben in der Zieldatei landen (dazu wird Ausgabekanal 3, der defaultmäßig keinem bestimmten Zweck zugeordnet ist, verwendet). Außerdem werden mit der Eingabeumleitung die in der Schleife verwendeten "set /p" mit der Simulation einer Eingabe versorgt (zum Thema "Mehrere Ausgaben in eine Zeile schreiben" gibt's auch ein einschlägiges Tutorial).

In Zeile 15 wird der erste Teil der Überschriftenzeile erzeugt - die oben angesprochene Technik sorgt dafür, dass noch keine Zeilenschaltung geschrieben wird.
Zeile 16 ergänz die Überschrift um die Servernamen, die zu diesem Zweck per "dir" ermittelt und anhand der "_" isoliert werden.
Zeile 17 schließlich versorgt die Überschriftszeile mit der abschließenden Zeilenschaltung (in anderen Fällen wird gerne auch "echo." verwendet).

Zeile 18 legt fest, dass aus der ersten gefundenen Datei (nach Überspringen der Zeile 1 mit "Servername Datum Uhrzeit CPU-Wert(Auslastung)") zeilenweise die gesamten Informationen gelesen werden (stehen dann in %%i, %%j, %%k und %%l), damit in Zeile 19 alles außer dem Servernamen %%i nach dem "ABC;" in die Zieldatei geschrieben werden kann - wieder ohne abschließende Zeilenschaltung.

In Zeile 20 wird wieder per "dir" eine geordnete Liste der Quelldateien erzeugt, aber der erste Eintrag (die Datei %inDatei1% wurde ja schon behandelt) übersprungen. In den restlichen Dateien wird jeweils die sich aus Datum und Uhrzeit (%%j und %%k) ergebende Zeile gesucht und der interessierende Wert (= Token 4) ausgelesen und, samt einem ";" davor, in die Zieldatei geschrieben - wieder jeweils ohne Zeilenumbrucht - dieser folgt in der Zeile 21.

Schließlich wird noch in Zeile 23 das "pushd" (der Ordnung halber) rückgängig gemacht.

Grüße
bastla

P.S.: Ich kann für den Batch Zeilennummern nennen, denn ich habe ihn ja passend formatiert - und da Du ja (auch als "Nicht-Tischler") zumindest polieren können solltest, kannst Du das für den von Dir geposteten Code sicher auch noch nachholen ...
Bitte warten ..
Mitglied: Landstreicher
21.11.2011 um 13:45 Uhr
Hallo bastla,

vielen Dank ! es funktioniert wunderbar! Danke auch noch an pieh-ejdsch und alle anderen Beteidigten.

Das Endergebnis poste ich die Tage noch





Gruß Landstreicher
Bitte warten ..
Mitglied: Biber
26.11.2011 um 20:48 Uhr
Moin Langverstreicher,

Zitat von Landstreicher:
Das Endergebnis poste ich die Tage noch

Ich hatte mal eine flüchtige Bekannte, bei der dauerten die Tage auch manchmal wochenlang.

Nun bemühe ich mich durchaus hier im Forum, das Gender-Bewusstsein zu schärfen und von daher auch dir eine längere Periode zu gönnen, aber....

Magst du nicht zumindest den Beitrag auf "Hinreichend beantwortet" setzen?

Zum Dank würde ich am nächsten Sonntag eine Kerze anzünden.

Grüße
Biber
Bitte warten ..
Mitglied: Landstreicher
13.12.2011 um 10:50 Uhr
Hallo,

war auf Dienstreise, daher etwas verspätet mal mein fertiges Batch

01.
@echo off&setlocal 
02.
 
03.
REM Darstellung der CPU-Auslastung Windowsserver 
04.
 
05.
title Performance Windowsserver 
06.
REM ##################################### 
07.
REM		Setzen des Datums 
08.
REM ##################################### 
09.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set Cyear=%%c%%b%%a 
10.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set DAY=%%a 
11.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set MON=%%b 
12.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set YEAR=%%c 
13.
 
14.
REM ##################################### 
15.
REM		Setzen der Zeit 
16.
REM ##################################### 
17.
set hh=%TIME:~0,2% 
18.
set mm=%TIME:~3,2% 
19.
set ss=%TIME:~6,2% 
20.
 
21.
REM ##################################### 
22.
REM		Setze Serverlist 
23.
REM ##################################### 
24.
set servera=Q4DE8NCO* 
25.
set SID=DKS 
26.
 
27.
REM ##################################### 
28.
REM		Setzen der Pararmeter 
29.
REM ##################################### 
30.
set Java="C:\Program Files\Java\jre6\bin\java.exe" 
31.
set ChartMaker=D:\Charts\bin\ 
32.
set Datadir=D:\Charts\data\ 
33.
set PNGdir=D:\Charts\data\PNG\ 
34.
set INIdir=D:\Charts\ini\ 
35.
set Quelle=D:\Charts\quelle\"  
36.
set OutFile=aktuell_win.csv 
37.
set Output=3^>"%datadir%%Outfile%" 
38.
set PngFile=aktuell_win.png 
39.
set IniFile=chart_win.ini 
40.
set "inDatei=CPU_Q4DE8NCO*_%cyear%" & set "inDatei1=" 
41.
 
42.
REM ##################################### 
43.
REM		Check Verzeichnisse 
44.
REM ##################################### 
45.
if not exist %Chartmaker% mkdir %Chartmaker% 
46.
if not exist %Datadir% mkdir %Datadir% 
47.
if not exist %PNGdir% mkdir %PNGdir% 
48.
if not exist %INIdir% mkdir %INIdir% 
49.
 
50.
REM ##################################### 
51.
REM		Baue OutFile 
52.
REM ##################################### 
53.
pushd "%quelle%" 
54.
del "%Output%" 2>nul 
55.
 
56.
for /f "delims=" %%i in ('dir /b /on "%inDatei%"') do if not defined inDatei1 set "inDatei1=%%i" 
57.
if not defined inDatei1 echo Keine passende Datei gefunden! & goto :eof 
58.
 
59.
%Output% <nul ( 
60.
    >&3 set/p="SID;Datum/Zeit" 
61.
    for /f "tokens=2 delims=_" %%d in ('dir /b /on "%inDatei%"') do >&3 set/p=";%%d" 
62.
    >&3 echo( 
63.
    for /f skip^=1usebackqtokens^=1-4 %%i in (%inDatei1%) do ( 
64.
        >&3 set/p="%sid%;%%j %%k;%%l" 
65.
        for /f "skip=1 delims=" %%a in ('dir /b /on "%inDatei%"') do for /f tokens^=4 %%m in (' findstr /c:"%%j %%k" %%a ') do >&3 set/p=";%%m" 
66.
        >&3 echo( 
67.
) ) 
68.
popd 
69.
call %ChartMaker%ersetze.bat 
70.
REM ##################################### 
71.
REM		Baue Chart  
72.
REM ##################################### 
73.
cd %ChartMaker% 
74.
%JAVA% -jar %ChartMaker%ChartMaker.jar %Datadir%%Outfile% %PNGdir%%PngFile% %INIdir%%IniFile% 
75.
%PNGdir%%PngFile%
Da sich das Datum in der Ziel - Datei doch geändert hat musste ich die ersetze.bat anschließen drüberbügeln lassen ...

01.
@echo off 
02.
setlocal enabledelayedexpansion 
03.
pushd "D:\Charts\data" 
04.
REM ##################################### 
05.
REM		Setzen des Datums 
06.
REM ##################################### 
07.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set Cyear=%%c%%b%%a 
08.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set DAY=%%a 
09.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set MON=%%b 
10.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set YEAR=%%c 
11.
 
12.
REM ##################################### 
13.
REM		Setze Datei 
14.
REM ##################################### 
15.
 
16.
set "filename=aktuell_win.csv" 
17.
set "tempfile=aktuell_win_.csv" 
18.
 
19.
REM ##################################### 
20.
REM		lese erste Zeile aus 
21.
REM ##################################### 
22.
 
23.
for /F "delims=" %%i in (D:\Charts\data\aktuell_win.csv) do if not defined zeile set "zeile=%%i" 
24.
echo %zeile% >%tempfile% 
25.
 
26.
REM ##################################### 
27.
REM  lese restliche Zeilen aus und bau um 
28.
REM ##################################### 
29.
 
30.
for /F "skip=1 tokens=1-13 delims=/;" %%a in (%filename%) do ( 
31.
set text=%%a;%%c.%%b.%%d;%%e;%%f;%%g;%%h;%%i;%%j;%%k;%%l;%%m 
32.
set text=!text:^|=;! 
33.
echo !text!>>%tempfile% 
34.
35.
 
36.
 
37.
REM ##################################### 
38.
REM  lösche altes File / benenne TEMP um 
39.
REM ##################################### 
40.
 
41.
del %filename% 
42.
ren %tempfile% %filename% 
43.
popd
das Ergebnis sieht dann so aus aktuell_win.csv
01.
SID;Datum/Zeit;Q4DE8NCOJ23;Q4DE8NCOJ24;Q4DE8NCOJ25;Q4DE8NCOJ26;Q4DE8NCOJ27;Q4DE8NCOJ28  
02.
DKS;12.12.2011 00:10;1;1;2;1;0;2;;; 
03.
DKS;12.12.2011 00:20;0;1;4;0;2;0;;; 
04.
DKS;12.12.2011 00:30;0;2;2;1;0;0;;; 
05.
DKS;12.12.2011 00:40;1;0;3;1;0;1;;; 
06.
DKS;12.12.2011 00:50;1;0;1;1;1;0;;; 
07.
DKS;12.12.2011 01:00;0;0;2;1;0;1;;; 
08.
DKS;12.12.2011 01:10;1;1;2;1;0;3;;; 
09.
DKS;12.12.2011 01:20;1;2;2;0;0;1;;;
(;;; <-- hier kommen noch 3 Server - CPU - Werte hinzu)

anschließend wird durch den Cchartmaker.jar eine CPU Kurve gebaut ...

vielen dank noch mal an alle Mitwirkenden

gruß Landstreicher
Bitte warten ..
Mitglied: Landstreicher
13.12.2011 um 10:51 Uhr
Nachtrag: ich bestehe auf meine angezündete Kerze
PS: wenn jemand optimierungsvorschläge hat ... nur zu bin ganz Ohr.
Bitte warten ..
Mitglied: Biber
13.12.2011 um 13:19 Uhr
Moin Lahmschleicher


Zitat von Landstreicher:
Nachtrag: ich bestehe auf meine angezündete Kerze
PS: wenn jemand optimierungsvorschläge hat ... nur zu bin ganz Ohr.
Da bist du aber haarscharf an einem -na ja, nicht Fall ins Bodenlose, aber zumindest dem Zurückholen auf den Boden der harten Tatsachen vorbeigeschrammt.
Gerade gestern abend habe ich noch ein paar feedbacklose Beiträge durchgeblättert und auch ein paar endgültig vaporisiert.
Deinen hatte ich auch in der Hand... *gg

Wie dem auch sei - du scheinst ein gutes Gefühl für das richtige Timing zu haben.

Ich werde deshalb am nächsten Sonntag gleich vier Kerzen für Dich anzünden.

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Systemdateien
gelöst Registry-Schlüssel per Batch auslesen und in Datei schreiben (9)

Frage von Philzip zum Thema Windows Systemdateien ...

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

Frage von Gurkenhobel zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...

Peripheriegeräte
Wlan stört Funkmaus (11)

Frage von Falaffel zum Thema Peripheriegeräte ...

Peripheriegeräte
gelöst USB Festplatte verliert Laufwerksbuchstabe (9)

Frage von cese4321 zum Thema Peripheriegeräte ...