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

Inhalt von Verzeichnis auflisten und batch übergeben

Frage Entwicklung Batch & Shell

Mitglied: Landstreicher

Landstreicher (Level 1) - Jetzt verbinden

21.04.2008, aktualisiert 18.10.2012, 6621 Aufrufe, 30 Kommentare

Hallo ich habe folgendes Problem,

ich lasse den Inhalt eines Verzeichnisses auflisten um diesen dann als Variable zu setzen.
swoweit funktioniert das auch.
anschließend will ich dann das er die dateien nacheinander ausliest und den wert anzeigt.
und genau da beginnt das problem ... nach dem anzeigen des inhaltes wars das dann schon ... nur wieso ?
hat da jemand ne lösung parat ?

01.
@echo off 
02.
 
03.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CDATE=%%c%%b%%a 
04.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonat=%%b 
05.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonjahr=%%c%%b 
06.
 
07.
::ren %Ziel% %cdate% 
08.
 
09.
:: Variablenbelegung nach OS: 
10.
:: WinNT: a = Wochentag, b = Monat, c = Tag, d = Jahr 
11.
:: WinXP: a = Tag, b = Monat, c = Jahr, d= Wochentag 
12.
 
13.
:: In diesem Fall: 15-10-Mi (Unter Win2000) und 2003-10-15 (unter XP) 
14.
 
15.
::------------------------------------------------------------------------------------------ 
16.
 
17.
set ordner=1500001463_%Cmonjahr% 
18.
set quelle=\\w8n00278\P800\1500001463_%Cmonjahr%*.csv 
19.
set ziel=\\w8n00278\P800\%ordner%\1500001463_%Cmonjahr%*.csv 
20.
echo Jahr Monat = %Cmonjahr% 
21.
echo Monat=%Cmonat% 
22.
 
23.
for /f "delims=" %%i in ('dir /b /tc \\w8n00278\P800\%ordner%\1500001463_%Cmonjahr%*_P800_DB.csv') do call :ProcessFile "%%i" 
24.
:ProcessFile 
25.
set "Variable=%~1" 
26.
echo %Variable% 
27.
for /f "skip=2 tokens=1,2,3,4,5,6,7,8,9,10 delims=;" %%a in (\\w8n00278\P800\%ordner%\%Variable%) do echo %%d %%i 

bin dankbar wie immer
gruß landstreicher
30 Antworten
Mitglied: Landstreicher
23.04.2008 um 09:23 Uhr
also ich habe zwar das Problem erkannt, ledier verstehe ich es aber nicht ganz.

im ersten teil also bis zu "for /f "skip...." zieht er alles fast reibungslos durch ... (einen leeren Wert schmeisst er mit raus), aber er übergibt nicht die Werte an den letzen step, da wo ich mir speziell den Inhalt der datei bzw. nur 2 spalten anzeigen lassen will.

kann mir da niemand auf die sprünge helfen ???
Bitte warten ..
Mitglied: Biber
23.04.2008 um 09:53 Uhr
Moin Landstreicher,

Du hast es ja schon weitgehend zum Debuggen vorbereitet.

Dann reduziere doch den zu untersuchenden Teil auf:
01.
... 
02.
echo [%Variable%] 
03.
::## und poste, was angezeigt wird 
04.
for /f "skip=2 tokens=4,9 delims=;" %%a in (\\w8n00278\P800\%ordner%\%Variable%) do echo Token4:[%%a] Token9: [%%b] 
05.
:: wenn Du nur die zwei Tokens #4 und #9 brauchst, reicht "tokens=4,9" 
06.
...
Und teste doch bitte die untere Zeile [sinngemäß] mal am CMD-Prompt gegen eine der *.csv-Dateien und/oder poste mal die ersten 5 Zeilen einer dieser CSV-Dateien.

Grüße
Biber
Bitte warten ..
Mitglied: Landstreicher
23.04.2008 um 11:42 Uhr
Hallo Biber,

danke für deine Antwort, aber das war es auch nicht , jedoch das hat mich auch fast gleich auf den Fehler gebracht....
... der da wäre ... skip=2 mit skip=1 funktioniert es ;) *asche auf mein Haupt*

nun habe ich zwar das Problem soweit gelöst.
jetzt kann ich den nächsten Beitrag eröffnen, oder sollen wir gleich hier weiter machen , denn eigentlich gehört das zu dem ganzen gestammel mit dazu.?
Bitte warten ..
Mitglied: Biber
23.04.2008 um 13:03 Uhr
Na ja, Strandleicher,

dann mach mal hier weiter... wenn es doch um den gleichen Batch geht.

Aber dann bitte nicht DIREKT unterhalb DIESES Kommentars antworten - wenigstens den knall ich wieder weg.

Grüße
Biber
Bitte warten ..
Mitglied: Landstreicher
24.04.2008 um 14:54 Uhr
ok weiter gehts.
nun bin ich soweit, das er mir die ausgabe gibt die ich gerne hätte.

01.
@echo off 
02.
 
03.
title sortiere Daten um fuer 9100007521 .... 
04.
 
05.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CDATE=%%c%%b%%a 
06.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonat=%%b 
07.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonjahr=%%c%%b 
08.
 
09.
::ren %Ziel% %cdate% 
10.
 
11.
:: Variablenbelegung nach OS: 
12.
:: WinNT: a = Wochentag, b = Monat, c = Tag, d = Jahr 
13.
:: WinXP: a = Tag, b = Monat, c = Jahr, d= Wochentag 
14.
 
15.
:: In diesem Fall: 15-10-Mi (Unter Win2000) und 2003-10-15 (unter XP) 
16.
 
17.
::------------------------------------------------------------------------------------------ 
18.
 
19.
set ordner=9100007521_%Cmonjahr% 
20.
set quelle=\\w8n00278\P800\9100007521_%Cmonjahr%*.csv 
21.
set ziel=\\w8n00278\P800\%ordner%\9100007521_%Cmonjahr%*.csv 
22.
echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG > \\w8n00278\P800\%ordner%\PPW_auswertung.csv 
23.
echo Jahr Monat = %Cmonjahr% 
24.
echo Monat=%Cmonat% 
25.
 
26.
for /f "delims=" %%a in ('dir /b /tc \\w8n00278\P800\%ordner%\9100007521_%Cmonjahr%*_P800_DB.csv') do call :ProcessFile3 "%%a"  
27.
:ProcessFile3 
28.
set "Var=%~1" 
29.
echo %Var% 
30.
for /f "skip=1 tokens=1,2,3,4,5,6,7,8,9,10 delims=;" %%a in (\\w8n00278\P800\%ordner%\%Var%) do echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i >> \\w8n00278\P800\%ordner%\PPW_auswertung.csv
nur möchte ich gern, das er mir nur den höchsten wert bzw. die ganze zeile der CSV-Datei in der sich der Höchste Wert befindet, in eine andere CSV umleitet.
Leider hab ich keinen Punkt wo ich aufsetzen könnte.
weisst du mehr Biber ?

Gruß der im Sand Leicher :D
Bitte warten ..
Mitglied: Biber
25.04.2008 um 19:19 Uhr
Moin Leichtstrander,

nicht, dass ich nicht tagelang darüber nachgedacht hätte, aber...

nur möchte ich gern, das er mir nur den höchsten wert
bzw. die ganze zeile der CSV-Datei in der sich der Höchste Wert befindet

Wie was welchen höchsten Wert?? Du schreibst doch 10 Werte je Zeile raus?
Welcher davon ist denn nun der kritische, den Du sofort sehen willst???

Ich schließe mal das erste Feld "Co" aus...

Ratlos
Biber
Bitte warten ..
Mitglied: Landstreicher
28.04.2008 um 09:41 Uhr
ok, mein fehler... und ich will ja nicht das du ratlos bleibst

also in %%i kommen verschieden werte raus (logaufkommen)
diese werte sind für einen monat. soweit so gut.

jetzt würde ich gern irgendwie die werte, die bei %%i rauskommen vergleichen und nur den höchste wert (incl. %%a - %%i) in eine seperate CSV umlenken, denn nur die zeile mit dem höchsten wert interessiert mich.

ich hoffe ich habe etwas licht ins dunkel gebracht.

gruß sandvergleicher
Bitte warten ..
Mitglied: Biber
28.04.2008 um 19:15 Uhr
Moin Streichlander,

dann müssen wir die letzte Zeile mal optisch auf ein paar Zeilen auseinanderziehen.

So sieht sie jetzt (formatiert) aus:
01.
for /f "skip=1 tokens=1-10 delims=;" %%a in (\\w8n00278\P800\%ordner%\%Var%) do ( 
02.
        echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i >> \\w8n00278\P800\%ordner%\PPW_auswertung.csv 
03.
)
Oben hinter das "Echo off" in der ersten Zeile muss noch ein " & Setlocal EnableDelayedExpamsion"
Dort definieren wir eine Variable %max% mit der Halbzeile "Set /a max=0"

Und in dieser FOR /F-Konstruktion merken wir uns das (relative) Maximum.
01.
for /f "skip=1 tokens=1-10 delims=;" %%a in (\\w8n00278\P800\%ordner%\%Var%) do ( 
02.
        If %%i GTR !max! Set /a "max=%%i" 
03.
        echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i >> \\w8n00278\P800\%ordner%\PPW_auswertung.csv 
04.
)
Thats all.
Und die Zeile mit dem Maximum in der neu geschriebenen Datei findest Du mit
FindStr+Suche exakt+am Ende der Zeile+ nach der Zeichenkette "Semikolon+Leerzeichen+%max%" "inDatei"
FindStr /C:"; %max%$" \\w8n00278\P800\%ordner%\PPW_auswertung.csv

Grüße
Biber
Bitte warten ..
Mitglied: Landstreicher
05.05.2008 um 11:25 Uhr
Danke Biber,

ich werde das jetzt mal testen

Ich gebe dann ein feedback, ob alles so hinhaut wie ich mir das dachte.

gruß landstreicher
Bitte warten ..
Mitglied: Landstreicher
05.05.2008 um 12:08 Uhr
Hallo Biber,

das geht ... fast komplett wie ich es gern hätte

2 kleine Sachen habe ich da noch offen:
Führe ich das Script aus kommt am ende folgende Meldung
01.
Jahr Monat = 200805 
02.
Monat=05 
03.
9100000988_20080501_P800_DB.csv 
04.
9100000988; 2008; 04; PCO; 0; 94302; 7; 1930543; 406574 
05.
9100000988_20080502_P800_DB.csv 
06.
9100000988; 2008; 04; PCO; 0; 94302; 7; 1930543; 406574 
07.
9100000988_20080503_P800_DB.csv 
08.
9100000988; 2008; 04; PCO; 0; 94302; 7; 1930543; 406574 
09.
9100000988_20080504_P800_DB.csv 
10.
9100000988; 2008; 04; PCO; 0; 94302; 7; 1930543; 406574 
11.
9100000988_20080505_P800_DB.csv 
12.
9100000988; 2008; 04; PCO; 0; 94302; 7; 1930543; 406574 
13.
ECHO ist ausgeschaltet (OFF). 
14.
Die Datei "\\w8n00278\P800\9100000988_200805\" kann nicht gefunden werden. 
15.
9100000988; 2008; 04; PCO; 0; 94302; 7; 1930543; 406574
wieso setzt er da keine Datei ? sondern ein Leerzeichen ?

und wie lenke ich diese Ausgabe
9100000988; 2008; 04; PCO; 0; 94302; 7; 1930543; 406574 am besten in eine Datei um, so das er dieser Wert nur einmal erscheint und nicht pro geprüfte Datei ?
in der Ausgabedatei soll die Überschrift stehen:
Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG
und direkt darunter dann die Ausgabe des Höchstwertes (bsp so)
9100000988; 2008; 04; PCO; 0; 94302; 7; 1930543; 406574

Gruß landstreicher.
Bitte warten ..
Mitglied: Biber
05.05.2008 um 12:44 Uhr
Moin La Strada,

das sind mir zuviele Probleme für eine Montachmittach-Mittachspause...

Aber wenn schon, dann fanden wir mit dem äüßeren Schleifenproblem an zum Warmwerden...
Die "ECHO is' ON" bzw. "Die Datei "\\{pfad}\" kann nicht gefunden werden"-Meldung kommen zustande, wenn die Variable "%var%" in :Process3 keinen Wert hat.
das wiederum kann eigentlich nur sein wenn der Befhl
dir /b /tc \\w8n00278\P800\%ordner%\9100007521_%Cmonjahr%*_P800_DB.csv
  • entweder ein Verzeichnis (=keine Datei) mit diesem Namensaufbau (mit-)findet
  • oder wenn eine Datei dabei ist, die Du zwar SEHEN, aber nicht lesen darfst (Rechteproblem)

Mach bitte mal ein
dir /b /tc \\w8n00278\P800\%ordner%\9100007521_200805*_P800_DB.csv
und danach ein
dir /b /a-d /tc \\w8n00278\P800\%ordner%\9100007521_200805*_P800_DB.csv
Wenn beim zweten Befehl mit dem Parameter "/a-d" [Attribut NICHT Directory] die Ausgabe kürzer ist, war es Fehlerfall 1 und Du musst das "/A-d" einbauen in den DIR-Befehl.

Wenn nich', schauen wir nach meinem Mittachsschläfchen weiter.

Grüße
Biber
Bitte warten ..
Mitglied: Landstreicher
06.05.2008 um 09:10 Uhr
Moin Biber

na ich will dich ja bei deinem verdienten Mittagsschlaf nicht stören *g*

also folgendes...
ich habe dieses Problem schon öfter feststellen dürfen und es ist so...
er nimmt wie schon bemerkt beim "dir /b /tc" die letzte Leerzeile mit, denn als ausgebe bekommt man am ende, wenn alle Dateien bereits durchlaufen sind:
Die Datei "\\w8n00278\P800\9100000988_200805\" kann nicht gefunden werden.

und die Ausgabe beim "dir /b /tc" oder "dir B /a-d /tc" sieht tatsache so aus, das unten eine leere Zeile steht.

9100000988_20080501_P800_DB.csv
9100000988_20080502_P800_DB.csv
9100000988_20080503_P800_DB.csv
9100000988_20080504_P800_DB.csv
9100000988_20080505_P800_DB.csv

d:\Documents and Settings\XXXXXX.thomas>

irgendwie komisch wie ich finde.

gruß sandverstreicher
Bitte warten ..
Mitglied: Biber
06.05.2008 um 19:30 Uhr
Moin Streichlaster,

....ganz falscher Film bzw. ganz falsche Stelle, an der wir gestern den vermeintlichen Fehler gesucht haben.

Hier ist das Problem (jetzt)
01.
for /f "delims=" %%a in ('dir /b /tc \\whatever ever.csv') do call :ProcessFile3 "%%a"  
02.
:ProcessFile3 
03.
...
...und hier der Bugfix
01.
for /f "delims=" %%a in ('dir /b /tc \\whatever ever.csv') do call :ProcessFile3 "%%a"  
02.
goto:eof 
03.
:ProcessFile3 
04.
....
Das fehlende "goto:eof" nach der FOR /F-Anweisung hat natürlich bewirkt, dass nach Abarbeitung aller Elemente die Zeile unterhalb von "FOR/F" ausgeführt werden.
Nicht per call: aufgerufen, sondern auf dem "ganz normalen Weg". dem ganz banalen Zeile-Für-Zeile ausführen.
Probier mal bitte.

Grüße
Biber
Bitte warten ..
Mitglied: Landstreicher
07.05.2008 um 08:43 Uhr
Sers Nagetier

leck mich am A , was so ein kleines aber feines goto :eof doch ausmachen kann ... darauf wäre ich im leben wohl nie gekommen :D

Besten Dank wie immer.
Damit besteht nun nur noch 1 Problem.
es wird ja nun der höchste Wert in die Datei geschrieben ... soweit sogut, nun brauche ich nur noch die Überschrift.
Wie sag ich ihm am ende der Batch, das er in die erste Zeile schreiben soll ? und nicht unten einfach nur anhängen ?
so das das ergebnis so aussieht ...

Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG
9100000988; 2008; 04; PCO; 0; 94302; 7; 1930543; 406574

gruß Sandverbleicher
Bitte warten ..
Mitglied: Biber
07.05.2008 um 09:12 Uhr
Moin AmStrandlaicher,

dieses kleine i-Tüpfelchen solltest Du dadurch erreichen können, dass Du unmittelbar vor der "FOR /F"-Anweisung, die die .csv-Dateien abfackelt, folgende Zeile einfügst:
01.
... 
02.
Echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG >\\w8n00278\P800\%ordner%\PPW_auswertung.csv 
03.
::...hier kommt dann.. 
04.
for /f "skip=1 tokens=1-10 delims=;" %%a in (...sülzdibülz....)
Ich hoffe, die vielen zusammengestückelten Fragmente passen noch zusammen...
Wäre schön, wenn Du noch mal den kompletten Schnipsel für einen final review posten könntest.

Grüße
Biber
Bitte warten ..
Mitglied: Landstreicher
07.05.2008 um 16:54 Uhr
:D
das werde ich natürlich tun Biber, aber ich muss das

>Echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG

anschließend oder vorweg in die Auswertung des Höchstwertes bringen, also quasie hier her
01.
FindStr+Suche exakt+am Ende der Zeile+ nach der Zeichenkette "Semikolon+Leerzeichen+%max%" "inDatei" 
02.
FindStr /C:"; %max%$" \\w8n00278\P800\%ordner%\PPW_auswertung.csv >\\w8n00278\P800\%ordner%\PPW_hoechstwert.csv
setze ich jetzt aber das
01.
Echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG >\\w8n00278\P800\%ordner%\PPW_hoechstwert.csv 
02.
FindStr+Suche exakt+am Ende der Zeile+ nach der Zeichenkette "Semikolon+Leerzeichen+%max%" "inDatei" 
03.
FindStr /C:"; %max%$" \\w8n00278\P800\%ordner%\PPW_auswertung.csv >\\w8n00278\P800\%ordner%\PPW_hoechstwert.csv

davor, ist es irgendwie am Ende nicht in der Ausgabedatei "PPW_hoechstwert.csv" zu finden. Setze ich es hinten ran, stehts in der zweiten zeile

Ich hoffe ich habe dich nicht zu sehr verwirrt ;)
Bitte warten ..
Mitglied: Biber
07.05.2008 um 17:25 Uhr
Moin Wandstreichler,

in Deinerm letzten geposteten 3-Zeilen-Fragment ist das Problem, dass sowohl in der ersten Zeilen mit dem "Echo whatever >ausgabedatei" wie auch mit der dritten Zeile "Findstr blubb >ausgabedatei" jeweils die "ausgabedatei" neu erzeugt wird.

Ändere bitte das zweite ">ausgabedatei" in ein ">>ausgabedatei" und gut is'.

Und dann poste bitte nochmal das ganze Gelumpe in einem Stück zur Endabnahme.

Grüße
Biber

P.S.
Ich hoffe ich habe dich nicht zu sehr verwirrt
Ich habe schon Reden von Kohl und Stoiber und Songs von Grönemeyer überlebt... was soll mich verwirren..?
Bitte warten ..
Mitglied: Landstreicher
09.05.2008 um 09:25 Uhr
Moin Biber,

sorry das ich mich erst jetzt melde ... die Suppe stand mir bis zum Hals und nun kommt noch ne Erkältung dazu ... im Sommer ???? *schei

also das istd as fertige Machwerk, was noch nicht ganz so funktioniert wie es soll.

01.
@echo off & Setlocal EnableDelayedExpansion 
02.
title sortiere Daten um fuer 9100000988 .... 
03.
 
04.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CDATE=%%c%%b%%a 
05.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonat=%%b 
06.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonjahr=%%c%%b 
07.
 
08.
::ren %Ziel% %cdate% 
09.
 
10.
:: Variablenbelegung nach OS: 
11.
:: WinNT: a = Wochentag, b = Monat, c = Tag, d = Jahr 
12.
:: WinXP: a = Tag, b = Monat, c = Jahr, d= Wochentag 
13.
 
14.
:: In diesem Fall: 15-10-Mi (Unter Win2000) und 2003-10-15 (unter XP) 
15.
 
16.
::------------------------------------------------------------------------------------------ 
17.
Set /a max=0 
18.
set ordner=9100000988_%Cmonjahr% 
19.
set quelle=\\w8n00278\P800\9100000988_%Cmonjahr%*.csv 
20.
set ziel=\\w8n00278\P800\%ordner%\9100000988_%Cmonjahr%*.csv 
21.
echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG > \\w8n00278\P800\%ordner%\PPW_auswertung.csv 
22.
echo Jahr Monat = %Cmonjahr% 
23.
echo Monat=%Cmonat% 
24.
 
25.
for /f "delims=" %%a in ('dir /b /tc \\w8n00278\P800\%ordner%\9100000988_%Cmonjahr%*_P800_DB.csv') do call :ProcessFile2 "%%a"  
26.
goto :eof 
27.
:ProcessFile2 
28.
set "Var=%~1" 
29.
echo %Var% 
30.
for /f "skip=1 tokens=1-10 delims=;" %%a in (\\w8n00278\P800\%ordner%\%Var%) do ( 
31.
        If %%i GTR !max! Set /a "max=%%i" 
32.
        echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i >> \\w8n00278\P800\%ordner%\PPW_auswertung.csv 
33.
34.
 
35.
 
36.
 
37.
::FindStr+Suche exakt+am Ende der Zeile+ nach der Zeichenkette "Semikolon+Leerzeichen+%max%" "inDatei" 
38.
echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG > \\w8n00278\P800\%ordner%\PPW_hoechstwert.csv 
39.
FindStr /C:"; %max%" \\w8n00278\P800\%ordner%\PPW_auswertung.csv >>\\w8n00278\P800\%ordner%\PPW_hoechstwert.csv
so, kommt num der "Höchstwert" mehrmals vor, schreibt er diesen auch mehrmals in die PPW_hoechstwert.csv .. naja an dieser Stelle wäre es wohl besser man lässt den Wert in die PPW_hoechstwert.csv schreiben ohne das >> sondern lieber mit > und fügt dann irgendwie die erste Zeile in die Ausgabedatei PPW_hoechstwert.csv ein.

nur wie ?

mir ist auch schon mal passiert das er nicht den Höchstwert ausgegeben hat, sondern den letzten wert den er gefunden hat.

kannst du einen Fehler in meiner Datei entdecken ?

Gruß Sandvergleicher
Bitte warten ..
Mitglied: Biber
09.05.2008 um 10:57 Uhr
Moin La Streichla,

wenn nur ein Höchstwert in diese Höchstwertdatei durchkommen soll, dann wenden wir einfach dieselbe Strategie an, die wir vorher so geübt haben - Reduzierung auf einen Satz.

Am besten beim "FindStr /C:"
01.
... 
02.
:: JETZTIGER Zustand. 
03.
FindStr /C:"; %max%" \\w8n00278\P800\%ordner%\PPW_auswertung.csv >>\\w8n00278\P800\%ordner%\PPW_hoechstwert.csv
01.
... 
02.
:: Neuer Zustand. 
03.
FOR /F "delims=" %%i in ('FindStr /C:"; %max%" \\w8n00278\P800\%ordner%\PPW_auswertung.csv') ') do set "OneMaxLine=%%i" 
04.
Echo.%OneMaxLine%>>\\w8n00278\P800\%ordner%\PPW_hoechstwert.csv
Grüße und gute Besserung
Biber
Bitte warten ..
Mitglied: Landstreicher
09.05.2008 um 13:21 Uhr
Hallo Biber,

danke, wird schon irgendwie wieder, nur wieso gerade jetzt wo sommer ist/wird ?

also ich habe das gleich mal umgesetzt und siehe da es geht, leider aber auch nicht bei allen Dateien, was mich wundert, da diese eigentlich von Format und allem anderen identisch sind.

01.
@echo on & Setlocal EnableDelayedExpansion 
02.
title sortiere Daten um fuer 9100007521 .... 
03.
 
04.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CDATE=%%c%%b%%a 
05.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonat=%%b 
06.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonjahr=%%c%%b 
07.
 
08.
::ren %Ziel% %cdate% 
09.
 
10.
:: Variablenbelegung nach OS: 
11.
:: WinNT: a = Wochentag, b = Monat, c = Tag, d = Jahr 
12.
:: WinXP: a = Tag, b = Monat, c = Jahr, d= Wochentag 
13.
 
14.
:: In diesem Fall: 15-10-Mi (Unter Win2000) und 2003-10-15 (unter XP) 
15.
 
16.
::------------------------------------------------------------------------------------------ 
17.
Set /a max=0 
18.
set ordner=9100007521_%Cmonjahr% 
19.
set quelle=\\w8n00278\P800\9100007521_%Cmonjahr%*.csv 
20.
set ziel=\\w8n00278\P800\%ordner%\9100007521_%Cmonjahr%*.csv 
21.
echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG > \\w8n00278\P800\%ordner%\PPW_auswertung.csv 
22.
echo Jahr Monat = %Cmonjahr% 
23.
echo Monat=%Cmonat% 
24.
 
25.
for /f "delims=" %%a in ('dir /b /tc \\w8n00278\P800\%ordner%\9100007521_%Cmonjahr%*_P800_DB.csv') do call :ProcessFile4 "%%a"  
26.
goto :eof 
27.
:ProcessFile4 
28.
set "Var=%~1" 
29.
echo %Var% 
30.
for /f "skip=1 tokens=1-10 delims=;" %%a in (\\w8n00278\P800\%ordner%\%Var%) do ( 
31.
        If %%i GTR !max! Set /a "max=%%i" 
32.
        echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i >> \\w8n00278\P800\%ordner%\PPW_auswertung.csv 
33.
34.
 
35.
 
36.
 
37.
::FindStr+Suche exakt+am Ende der Zeile+ nach der Zeichenkette "Semikolon+Leerzeichen+%max%" "inDatei" 
38.
echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG > \\w8n00278\P800\%ordner%\PPW_hoechstwert.csv 
39.
FOR /F "delims=" %%i in ('FindStr /C:"; %max%" \\w8n00278\P800\%ordner%\PPW_auswertung.csv') do set "OneMaxLine=%%i" 
40.
Echo.%OneMaxLine%>>\\w8n00278\P800\%ordner%\PPW_hoechstwert.csv
inhalt der datei die er auswerten soll sieht so aus:

Co Jahr Monat Instanz AnzDBLinks AnzDBObjekte AnzTableSpaces DBSizeMB TAV_MB_TAG
9100007521 2008 4 PPW 0 172889 7 360912 31500
9100007521 2008 5 PPW 0 172999 7 369204 5800
9100007521 2008 5 PPW 0 173003 7 369204 7600
9100007521 2008 5 PPW 0 173003 7 369204 7600
9100007521 2008 5 PPW 0 173003 7 369204 7600


jetzt habe ich mal das "echo on" geschaltet und gesehen das er am anfang den wert "31500" setzt und diesen dann jeweils überbügelt mit den darauffolgenden Werten.

am ende wo er den höchsten Wert in die Datei ausgeben soll, zählt er den Wert "7600" 3 mal auf.

komisch oder ? bei allen anderen gehts nur da nicht ?
ich verstehe es nicht ganz, siehst du da mehr als ich ?

Gruß Strand-Verbleichter
Bitte warten ..
Mitglied: Biber
10.05.2008 um 14:51 Uhr
Moin Strandgleiter,

ich kann ärgerlicherweise diesen Fehler reproduzieren, mir aber nicht erklären..

Fakt ist, trotz "setlocal EnableDelayedExpansion wird in diesem Block..
01.
for /f "skip=1 tokens=1-10 delims=;" %%a in (\\w8n00278\P800\%ordner%\%Var%) do ( 
02.
        If %%i GTR !max! Set /a "max=%%i" 
03.
        echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i >> \\w8n00278\P800\%ordner%\PPW_auswertung.csv 
04.
)
...die Variable Max nicht mit ihrem aktuellen Wert !max! aufgelöst.
Versteh ich nicht - habe aber diese Effekt auch auf meinem Rechner. Muss ich mal bastla fragen...

Anyhow - zwei Workarounds fallen mir ein (*BTW* Mach ich denn eigentlich irgendetwas anderes als Workarounds, seit Bill Gates meinte, er müsste unbedingt Software verkaufen statt Gebrauchtwagen? *grmmbl*)..

a) Diesen Block ändern auf:
01.
:Processfile 
02.
... 
03.
for /f "skip=1 tokens=1-10 delims=;" %%a in (\\w8n00278\P800\%ordner%\%Var%) do ( 
04.
        For /f "delims== tokens=2" %%x in ('set max') do IF %%i GTR %%x Set /a "max=%%i" 
05.
        echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i >> \\w8n00278\P800\%ordner%\PPW_auswertung.csv 
06.
)
b) Andere Variante wäre, einen Call-Block aufzurufen, was dann ungefähr so ästhetisch aussehen würde *würg*:
01.
:SetMymax Parameter1von1 ist der mit %max% zu vergleichende Wert 
02.
If %1 GTR %max% Set /a "max=%1" 
03.
goto: eof 
04.
 
05.
:Processfile 
06.
... 
07.
for /f "skip=1 tokens=1-10 delims=;" %%a in (\\w8n00278\P800\%ordner%\%Var%) do ( 
08.
        call :SetMyMax %%i 
09.
        echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i >> \\w8n00278\P800\%ordner%\PPW_auswertung.csv 
10.
11.
...
Sollte mir noch ein Licht aufgehen, wo der Denk-/Syntaxfehler liegt, dann bist Du einer der ersten, die es erfahren.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
11.05.2008 um 20:36 Uhr
Hallo "Hoffentlich bald ganz Erleichterter" und Biber!

Tschuldigung, dass ich Biber's Frage an mich vorwegnehme und hier auch meinen Sand Senf dazugebe - aber bei mir funktioniert (ohne konzeptionelle Änderung, nur mit kleinen kosmetischen Anpassungen) diese Version:
01.
@echo off & Setlocal EnableDelayedExpansion 
02.
set Pfad=\\w8n00278\P800 
03.
set "Pre=9100007521" 
04.
 
05.
title sortiere Daten um fuer %Pre% .... 
06.
 
07.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CDATE=%%c%%b%%a 
08.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonat=%%b 
09.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonjahr=%%c%%b 
10.
 
11.
::ren %Ziel% %cdate% 
12.
 
13.
:: Variablenbelegung nach OS: 
14.
:: WinNT: a = Wochentag, b = Monat, c = Tag, d = Jahr 
15.
:: WinXP: a = Tag, b = Monat, c = Jahr, d= Wochentag 
16.
 
17.
:: In diesem Fall: 15-10-Mi (Unter Win2000) und 2003-10-15 (unter XP) 
18.
 
19.
::------------------------------------------------------------------------------------------ 
20.
 
21.
set ordner=%Pre%_%Cmonjahr% 
22.
Set /a max=0 
23.
 
24.
echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG >%Pfad%\%ordner%\PPW_auswertung.csv 
25.
echo Jahr Monat = %Cmonjahr% 
26.
echo Monat=%Cmonat% 
27.
 
28.
for /f "delims=" %%a in ('dir /b /tc /od %Pfad%\%ordner%\%Pre%_%Cmonjahr%*_P800_DB.csv') do call :ProcessFile4 "%%a"  
29.
goto :eof 
30.
 
31.
:ProcessFile4 
32.
set "Var=%~1" 
33.
echo %Var% 
34.
for /f "skip=1 tokens=1-10 delims=;" %%a in (%Pfad%\%ordner%\%Var%) do ( 
35.
        If %%i GTR !max! Set /a "max=%%i" 
36.
        (echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i)>>%Pfad%\%ordner%\PPW_auswertung.csv 
37.
38.
 
39.
::FindStr+Suche exakt+am Ende der Zeile+ nach der Zeichenkette "Semikolon+Leerzeichen+%max%" "inDatei" 
40.
echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG >%Pfad%\%ordner%\PPW_hoechstwert.csv 
41.
FOR /F "delims=" %%i in ('FindStr /E /C:"; %max%" %Pfad%\%ordner%\PPW_auswertung.csv') do set "OneMaxLine=%%i" 
42.
Echo\%OneMaxLine%>>%Pfad%\%ordner%\PPW_hoechstwert.csv
mit diesen beiden Dateien (mit der ersten alleine natürlich auch):
01.
Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG 
02.
9100007521;2008;4;PPW;0;172889;7;360912;31500 
03.
9100007521;2008;5;PPW;0;172999;7;369204;5800 
04.
9100007521;2008;5;PPW;0;173003;7;369204;7600 
05.
9100007521;2008;5;PPW;0;173003;7;369204;7600 
06.
9100007521;2008;5;PPW;0;173003;7;369204;7600
und
01.
Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG 
02.
9100007521;2008;5;PPW;0;173009;7;373155;30000 
03.
9100007521;2008;5;PPW;0;173012;7;373163;33333 
04.
9100007521;2008;5;PPW;0;173013;7;373164;27600
Ergebnis ("PPW_hoechstwert.csv"):
01.
Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG  
02.
9100007521; 2008; 5; PPW; 0; 173012; 7; 373163; 33333
Grüße
bastla

P.S.: ... oder habe jetzt ich etwas übersehen?
Bitte warten ..
Mitglied: Landstreicher
13.05.2008 um 11:05 Uhr
Hallo Biber, Hallo Bastla,

ich habe mal bastla seine Version getestet, leider auch hier ohne Erfolg.
an dem Punkt wo er mir den Max-Wert ausgeben soll, schreibt er gar nichts, lediglich die Überschrift (Spaltenbezeichnung) wird in die Datei PPW_hoechstwert.csv geschrieben.

Ausgabe:
01.
Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG
kann es sein das in der Zeile:
01.
Echo\%OneMaxLine%>>%Pfad%\%ordner%\PPW_hoechstwert.csv
ein fehler ist ?

Grüße "im sand ablaicher" :D
Bitte warten ..
Mitglied: bastla
13.05.2008 um 11:40 Uhr
Hallo Sandgeeichter!

Vieleicht mit dieser Alternativschreibweise:
01.
>>%Pfad%\%ordner%\PPW_hoechstwert.csv Echo\%OneMaxLine%
Hast Du übrigens mit den oben von mir geposteten Beispieldaten getestet (bei mir klappt es damit nämlich auch heute noch )?

Auch Biber's Alternativen funktionieren (natürlich ) bei mir ...

Grüße
bastla
Bitte warten ..
Mitglied: Landstreicher
13.05.2008 um 14:51 Uhr
Hi Bastla,

ja ich auch biber seine Version erfolglos getestet ... und nun stellt sich mir die frage .. ist mein betriebssystem vom mond ? ;)

ich habe jetzt wirklich keinen plan mehr, woran das noch liegen könnte, deswegen noch mal schritt für schritt
ich habe mehrere Dateien, aus denen ich dann eine mache und zwar diese hier:


01.
Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG  
02.
9100007521; 2008; 04; PPW; 0; 172889; 7; 360912; 31500                                    
03.
9100007521; 2008; 05; PPW; 0; 172999; 7; 369204; 5800                                     
04.
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 7600                                     
05.
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 7600                                     
06.
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 7600                                     
07.
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 7900                                     
08.
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 8800                                     
09.
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 11600                                    
10.
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 11600                                    
11.
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 11600                                    
12.
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 11600                                    
13.
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 11600                                    
14.
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 11600    
und mit dieser Batch würde ich anschliessend gern das Höchste ergebnis in ganzer Zeile in die "PPW_hoechstwert.csv" umleiten.

01.
@echo off & Setlocal EnableDelayedExpansion 
02.
set Pfad=\\w8n00278\P800 
03.
set "Pre=9100007521" 
04.
 
05.
title sortiere Daten um fuer %Pre% .... 
06.
 
07.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CDATE=%%c%%b%%a 
08.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonat=%%b 
09.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonjahr=%%c%%b 
10.
 
11.
::ren %Ziel% %cdate% 
12.
 
13.
:: Variablenbelegung nach OS: 
14.
:: WinNT: a = Wochentag, b = Monat, c = Tag, d = Jahr 
15.
:: WinXP: a = Tag, b = Monat, c = Jahr, d= Wochentag 
16.
 
17.
:: In diesem Fall: 15-10-Mi (Unter Win2000) und 2003-10-15 (unter XP) 
18.
 
19.
::------------------------------------------------------------------------------------------ 
20.
 
21.
set ordner=%Pre%_%Cmonjahr% 
22.
Set /a max=0 
23.
 
24.
echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG >%Pfad%\%ordner%\PPW_auswertung.csv 
25.
echo Jahr Monat = %Cmonjahr% 
26.
echo Monat=%Cmonat% 
27.
 
28.
for /f "delims=" %%a in ('dir /b /tc /od %Pfad%\%ordner%\%Pre%_%Cmonjahr%*_P800_DB.csv') do call :ProcessFile4 "%%a"  
29.
goto :eof 
30.
 
31.
:ProcessFile4 
32.
set "Var=%~1" 
33.
echo %Var% 
34.
for /f "skip=1 tokens=1-10 delims=;" %%a in (%Pfad%\%ordner%\%Var%) do ( 
35.
        If %%i GTR !max! Set /a "max=%%i" 
36.
        (echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i)>>%Pfad%\%ordner%\PPW_auswertung.csv 
37.
38.
 
39.
::FindStr+Suche exakt+am Ende der Zeile+ nach der Zeichenkette "Semikolon+Leerzeichen+%max%" "inDatei" 
40.
echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG >%Pfad%\%ordner%\PPW_hoechstwert.csv 
41.
FOR /F "delims=" %%i in ('FindStr /E /C:"; %max%" %Pfad%\%ordner%\PPW_auswertung.csv') do set "OneMaxLine=%%i" 
42.
Echo\%OneMaxLine%>>%Pfad%\%ordner%\PPW_hoechstwert.csv
das Problem dabei ist, das meine ausgabedatei anschliessen nur die Überschrift (Spaltennamen) enthält ... und das obwohl aus meiner sicht, alles so ist wie ihr es mir gesagt habt ... ich bin hier am verzweifeln *gleich anfange zu heulen, wäre ich nicht ein mann*

einen vorschlag, sofern hier nicht noch ein wundersamer tipfehler von mir gefunden wird, wäre, das ich euch die originaldatei mit meiner batch mal zukommen lassen würde. ?

gruß ausm sonnigen Bamberg
Bitte warten ..
Mitglied: Biber
13.05.2008 um 16:46 Uhr
Moin Sandschleicher,

das liebe ich so am Skripten: alles lässt sich irgendwann mit gesundem Menschenverstand erklären.

Der Tipp-/Denkfehler ist folgender:

Beim Tokenizen der CSV-Datei haben wir behauptet, zulässige DELIMS sind die Semikola ";".

Die CSV-Datei allerdings enthält zusätzlich noch optisch gefällig anzusehende Leerzeichen.
01.
9100007521; 2008; 04; PPW; 0; 172889; 7; 360912; 31500                                    
02.
9100007521; 2008; 05; PPW; 0; 172999; 7; 369204; 5800    
03.
...
Tja, und da die CMD von M$ und schon deshalb schlau ist, nimmt sie doch als Datentyp beim Vergleich...
01.
If %%i GTR !max! ....
... wenn links des Gleichheitszeichens eine 0 steht und rechts etwas, das mit " " (Leerzeichen) anfängt, z.B. " 35000"......was nimmt sie wohl an?
Richtig, CMD.exe nimmt an, dass wir Strings vergleichen wollen.

Also müssen wir ähnlich wie bei Heiratsanträgen, Teleshopping und Steuererklärungen etwas sorgfältiger formulieren, was wir haben wollen:

Streiche: for /f "skip=1 tokens=1-10 delims=;" %%a in..
Setze: for /f "skip=1 tokens=1-10 delims=; " %%a in...

---> zwei Delimiter: Semikolon und SPACE angeben ("delims=; " ).
Und bitte in dieser Reihenfolge, denn andersrum (SPACE und Semikolon=>"delims= ;") gibt es einen Syntaxfehler.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
13.05.2008, aktualisiert 18.10.2012
Hallo GanzWeicher und Biber!

Dass bereits die Ausgangsdatei Leerzeichen enthält, war aber nur zu erahnen - das erste (und einzige) konkrete Beispiel gab es erst hier - und dieses Beispiel enthält noch nicht einmal Semikola.

Für meine Tests habe ich daher angenommen, dass das Ausgabeformat nachträglich geändert worden wäre (da ansonsten ja "delims=;" keinen Sinn ergeben hätte) ...

Das Verschlimmbessern der zu erstellenden "PPW_auswertung.csv" mit zusätzlichen Leerzeichen hat mich zwar etwas irritiert, war aber für die "max"-Problematik nicht relevant.

Auch wenn's hier vorrangig Biber betroffen hat, kann ich nicht umhin, einen Wunsch für die Zukunft (und an zukünftige Fragesteller, auch wenn das hier kaum jemand lesen wird) zu formulieren:
Bitte im Rahmen der Problembeschreibung (möglichst originale) Testdaten in vernünftig (als Code) formatierter Form bereitstellen!

Grüße
bastla

P.S.: Andererseits wäre es ja fast schade gewesen, wenn dieser Thread schon vorzeitig erfolgsbedingt hätte geschlossen werden müssen ...
Bitte warten ..
Mitglied: Landstreicher
14.05.2008 um 11:30 Uhr
Hallo Männers

das hat ja super funktioniert *Begeisterung*
Das nächste mal, werde ich versuchen *schwör hoch und heilig* alles komplett richtig zu beschreiben, aber wo wäre da der Unterhaltungsefekt geblieben ? *räusper*

jetzt habe ich 75 % von dem was ich umsetzen wollte zusammen.

jetzt kommt nur noch ein kleiner Teil.
eine der Quelldateien sieht so aus: (pro Tag gibt es eine neue)

01.
Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG 
02.
1500000700;2008;04;AO3;2;177826;92;1967415;32200                                 
03.
1500000700;2008;04;AO5;2;506009;37;3181070;123660                                
04.
1500000700;2008;04;COG;0;10860;10;6385;400                                       
05.
1500000700;2008;04;EO3;2;97647;77;2020741;15200                                  
06.
1500000700;2008;04;MO4;0;46971;6;34782;450                                       
07.
1500000700;2008;04;P42;0;85726;34;461566;37800                                   
08.
1500000700;2008;04;PO3;2;97683;77;1998141;217400                                 
09.
1500000700;2008;04;PO5;2;520734;38;3403745;409320                                
10.
1500000700;2008;04;PONDP;0;33879;7;179035;146400                                 
11.
1500000700;2008;04;PONP;2;26930;23;402036;94800                                  
12.
1500000700;2008;04;REPOP;0;12947;7;2135;400                                      
13.
1500000700;2008;04;SO3;2;97658;93;1985357;170600                                 
14.
1500000700;2008;04;SO5;2;496609;38;3233573;140940                                
15.
1500000700;2008;04;T42;0;85675;34;444542;15120                                   
16.
1500000700;2008;04;TO3;2;97649;92;1935253;400                                    
17.
1500000700;2008;04;TO5;2;501443;37;3192562;32940 
nachdem sie dann aufbereitet wurde, sieht sie so aus (wie schon gesagt pro tag eine ergibt dann das hier)

01.
Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG  
02.
1500000700;2008;04;AO3;2;177826;92;1967415;32200                                  
03.
1500000700;2008;04;AO3;2;177826;92;1967415;32200                                  
04.
1500000700;2008;05;AO3;2;177826;92;1968967;400                                    
05.
1500000700;2008;05;AO3;2;177826;92;1968967;400                                    
06.
1500000700;2008;05;AO3;2;177826;92;1968967;400                                    
07.
1500000700;2008;05;AO3;2;177828;92;1968967;24000                                  
08.
1500000700;2008;05;AO3;2;177828;92;1968967;24000                                  
09.
1500000700;2008;05;AO3;2;177828;92;1968967;24000                                  
10.
1500000700;2008;05;AO3;2;177828;92;1968967;24000                                  
11.
1500000700;2008;05;AO3;2;177828;92;1968967;24000                                  
12.
1500000700;2008;05;AO3;2;177828;92;1968967;24000                                  
13.
1500000700;2008;05;AO3;2;177828;92;1968967;24000                                  
14.
1500000700;2008;05;AO3;2;177828;92;1968967;24000                                  
15.
1500000700;2008;05;AO3;2;177828;92;1968967;24000    
jetzt dachte ich mir , bauste die batch einfach nen bissl um, wird schon funktionieren, aber hmm wie immer ... wollte das nicht.

01.
@echo off & Setlocal EnableDelayedExpansion 
02.
set Pfad=\\w8n00278\P800 
03.
set "Pre=1500000700" 
04.
 
05.
title sortiere Daten um fuer %Pre% .... 
06.
 
07.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CDATE=%%c%%b%%a 
08.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonat=%%b 
09.
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonjahr=%%c%%b 
10.
 
11.
::ren %Ziel% %cdate% 
12.
 
13.
:: Variablenbelegung nach OS: 
14.
:: WinNT: a = Wochentag, b = Monat, c = Tag, d = Jahr 
15.
:: WinXP: a = Tag, b = Monat, c = Jahr, d= Wochentag 
16.
 
17.
:: In diesem Fall: 15-10-Mi (Unter Win2000) und 2003-10-15 (unter XP) 
18.
 
19.
::------------------------------------------------------------------------------------------ 
20.
 
21.
set ordner=%Pre%_%Cmonjahr% 
22.
Set /a max=0 
23.
 
24.
 
25.
echo Jahr Monat = %Cmonjahr% 
26.
echo Monat=%Cmonat% 
27.
 
28.
for /f "delims=" %%a in ('dir /b /tc /od %Pfad%\%ordner%\AO3_auswertung.csv') do call :ProcessFile4 "%%a"  
29.
goto :eof 
30.
 
31.
:ProcessFile4 
32.
set "Var=%~1" 
33.
echo %Var% 
34.
for /f "skip=1 tokens=1-10 delims=; " %%a in (%Pfad%\%ordner%\%Var%) do ( 
35.
        If %%i GTR !max! Set /a "max=%%i" 
36.
        (echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i) 
37.
38.
 
39.
echo %max% 
40.
::FindStr+Suche exakt+am Ende der Zeile+ nach der Zeichenkette "Semikolon+Leerzeichen+%max%" "inDatei" 
41.
echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG >%Pfad%\%ordner%\AO3_hoechstwert.csv 
42.
FOR /F "delims=" %%i in ('FindStr /E /C:"; %max%" %Pfad%\%ordner%\AO3_auswertung.csv') do set "OneMaxLine=%%i" 
43.
Echo\%OneMaxLine%>>%Pfad%\%ordner%\AO3_hoechstwert.csv
so den maxwert nimmt er wunderbar mit, nur schreibt er diesen nicht in die AO3_hoechstwert.csv.

woran kann das liegen ?

PS: ich weiss es klingt umständlich, erst die ganze datei zu zerpflücken, den höchstwert zu ermitteln und am ende die Datei wieder allerdings mit den höchstwerten zusammenzusetzen, genau so wie sie oben im ersten codefenster aussieht, aber was anderes hat nicht funktioniert (mit meinem wissenstand).

gruß aus dem sand vertreiber
Bitte warten ..
Mitglied: Biber
14.05.2008 um 13:16 Uhr
Moin Langbleiber,

ist die Umkehrung unserer Kommentare von gestern.

Wenn mittlerweile eine Zeile in der AO3_hoechstwert.csv so aussieht:
01.
1500000700;2008;04;AO3;2;177826;92;1967415;32200 
statt wie gestern früh noch..
01.
1500000700; 2008; 04; AO3; 2; 177826; 92; 1967415; 32200 
... dann wirst Du natürlich mit einem 'FindStr /E /C:"; %max%" nix mehr werden.

Denn die vorher so wortreich beschworene Sequenz "am Ende der Zeile+ nach der Zeichenkette "Semikolon+Leerzeichen+%max%" gibt es nur noch ohne Leerzeichen.

Grüße
Biber
Bitte warten ..
Mitglied: Landstreicher
15.05.2008 um 08:35 Uhr
Moin Biber,

klingt natürlich logisch ... ich schiebs mal auf mein Umfeld, das ich das nicht vorher erkannt habe ;)

habs auch gleich mal umgesetz und es geht.

Also von meiner Seite aus nochmals ein dickes DANKE an Dich und natürlich Bastla.


Grüße Landstreicher (hab alle namen durchgekaut, mir fällt kein lustiger mehr ein)
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...