landstreicher
Goto Top

Inhalt von Verzeichnis auflisten und batch übergeben

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 ?

@echo off

FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CDATE=%%c%%b%%a  
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonat=%%b  
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonjahr=%%c%%b  

::ren %Ziel% %cdate%

:: Variablenbelegung nach OS:
:: WinNT: a = Wochentag, b = Monat, c = Tag, d = Jahr
:: WinXP: a = Tag, b = Monat, c = Jahr, d= Wochentag

:: In diesem Fall: 15-10-Mi (Unter Win2000) und 2003-10-15 (unter XP)

::------------------------------------------------------------------------------------------

set ordner=1500001463_%Cmonjahr%
set quelle=\\w8n00278\P800\1500001463_%Cmonjahr%*.csv
set ziel=\\w8n00278\P800\%ordner%\1500001463_%Cmonjahr%*.csv
echo Jahr Monat = %Cmonjahr%
echo Monat=%Cmonat%

for /f "delims=" %%i in ('dir /b /tc \\w8n00278\P800\%ordner%\1500001463_%Cmonjahr%*_P800_DB.csv') do call :ProcessFile "%%i"  
:ProcessFile
set "Variable=%~1"  
echo %Variable%
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 face-wink
gruß landstreicher

Content-Key: 86013

Url: https://administrator.de/contentid/86013

Printed on: April 20, 2024 at 02:04 o'clock

Member: Landstreicher
Landstreicher Apr 23, 2008 at 07:23:57 (UTC)
Goto Top
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 ??? face-sad
Member: Biber
Biber Apr 23, 2008 at 07:53:28 (UTC)
Goto Top
Moin Landstreicher,

Du hast es ja schon weitgehend zum Debuggen vorbereitet.

Dann reduziere doch den zu untersuchenden Teil auf:
...
echo [%Variable%]
::## und poste, was angezeigt wird
for /f "skip=2 tokens=4,9 delims=;" %%a in (\\w8n00278\P800\%ordner%\%Variable%) do echo Token4:[%%a] Token9: [%%b]  
:: wenn Du nur die zwei Tokens #4 und #9 brauchst, reicht "tokens=4,9" 
...

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
Member: Landstreicher
Landstreicher Apr 23, 2008 at 09:42:27 (UTC)
Goto Top
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.?
Member: Biber
Biber Apr 23, 2008 at 11:03:57 (UTC)
Goto Top
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
Member: Landstreicher
Landstreicher Apr 24, 2008 at 12:54:24 (UTC)
Goto Top
ok weiter gehts.
nun bin ich soweit, das er mir die ausgabe gibt die ich gerne hätte.

@echo off

title sortiere Daten um fuer 9100007521 ....

FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CDATE=%%c%%b%%a  
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonat=%%b  
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonjahr=%%c%%b  

::ren %Ziel% %cdate%

:: Variablenbelegung nach OS:
:: WinNT: a = Wochentag, b = Monat, c = Tag, d = Jahr
:: WinXP: a = Tag, b = Monat, c = Jahr, d= Wochentag

:: In diesem Fall: 15-10-Mi (Unter Win2000) und 2003-10-15 (unter XP)

::------------------------------------------------------------------------------------------

set ordner=9100007521_%Cmonjahr%
set quelle=\\w8n00278\P800\9100007521_%Cmonjahr%*.csv
set ziel=\\w8n00278\P800\%ordner%\9100007521_%Cmonjahr%*.csv
echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG > \\w8n00278\P800\%ordner%\PPW_auswertung.csv
echo Jahr Monat = %Cmonjahr%
echo Monat=%Cmonat%

for /f "delims=" %%a in ('dir /b /tc \\w8n00278\P800\%ordner%\9100007521_%Cmonjahr%*_P800_DB.csv') do call :ProcessFile3 "%%a"   
:ProcessFile3
set "Var=%~1"  
echo %Var%
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
Member: Biber
Biber Apr 25, 2008 at 17:19:06 (UTC)
Goto Top
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
Member: Landstreicher
Landstreicher Apr 28, 2008 at 07:41:59 (UTC)
Goto Top
ok, mein fehler... und ich will ja nicht das du ratlos bleibst face-wink

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
Member: Biber
Biber Apr 28, 2008 at 17:15:54 (UTC)
Goto Top
Moin Streichlander,

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

So sieht sie jetzt (formatiert) aus:
for /f "skip=1 tokens=1-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
)

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.
for /f "skip=1 tokens=1-10 delims=;" %%a in (\\w8n00278\P800\%ordner%\%Var%) do (  
        If %%i GTR !max! Set /a "max=%%i"  
        echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i >> \\w8n00278\P800\%ordner%\PPW_auswertung.csv
)

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
Member: Landstreicher
Landstreicher May 05, 2008 at 09:25:38 (UTC)
Goto Top
Danke Biber,

ich werde das jetzt mal testen face-wink

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

gruß landstreicher
Member: Landstreicher
Landstreicher May 05, 2008 at 10:08:21 (UTC)
Goto Top
Hallo Biber,

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

2 kleine Sachen habe ich da noch offen:
Führe ich das Script aus kommt am ende folgende Meldung
Jahr Monat = 200805
Monat=05
9100000988_20080501_P800_DB.csv
9100000988; 2008; 04; PCO; 0; 94302; 7; 1930543; 406574
9100000988_20080502_P800_DB.csv
9100000988; 2008; 04; PCO; 0; 94302; 7; 1930543; 406574
9100000988_20080503_P800_DB.csv
9100000988; 2008; 04; PCO; 0; 94302; 7; 1930543; 406574
9100000988_20080504_P800_DB.csv
9100000988; 2008; 04; PCO; 0; 94302; 7; 1930543; 406574
9100000988_20080505_P800_DB.csv
9100000988; 2008; 04; PCO; 0; 94302; 7; 1930543; 406574
ECHO ist ausgeschaltet (OFF).
Die Datei "\\w8n00278\P800\9100000988_200805\" kann nicht gefunden werden.  
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.
Member: Biber
Biber May 05, 2008 at 10:44:52 (UTC)
Goto Top
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
Member: Landstreicher
Landstreicher May 06, 2008 at 07:10:26 (UTC)
Goto Top
Moin Biber face-wink

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
Member: Biber
Biber May 06, 2008 at 17:30:51 (UTC)
Goto Top
Moin Streichlaster,

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

Hier ist das Problem (jetzt)
for /f "delims=" %%a in ('dir /b /tc \\whatever ever.csv') do call :ProcessFile3 "%%a"   
:ProcessFile3
...
...und hier der Bugfix
for /f "delims=" %%a in ('dir /b /tc \\whatever ever.csv') do call :ProcessFile3 "%%a"   
goto:eof
:ProcessFile3
....
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
Member: Landstreicher
Landstreicher May 07, 2008 at 06:43:23 (UTC)
Goto Top
Sers Nagetier

leck mich am A face-wink , 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
Member: Biber
Biber May 07, 2008 at 07:12:11 (UTC)
Goto Top
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:
...
Echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG >\\w8n00278\P800\%ordner%\PPW_auswertung.csv
::...hier kommt dann..
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
Member: Landstreicher
Landstreicher May 07, 2008 at 14:54:13 (UTC)
Goto Top
: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
FindStr+Suche exakt+am Ende der Zeile+ nach der Zeichenkette "Semikolon+Leerzeichen+%max%" "inDatei"  
FindStr /C:"; %max%$" \\w8n00278\P800\%ordner%\PPW_auswertung.csv >\\w8n00278\P800\%ordner%\PPW_hoechstwert.csv  

setze ich jetzt aber das
Echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG >\\w8n00278\P800\%ordner%\PPW_hoechstwert.csv
FindStr+Suche exakt+am Ende der Zeile+ nach der Zeichenkette "Semikolon+Leerzeichen+%max%" "inDatei"  
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 face-sad

Ich hoffe ich habe dich nicht zu sehr verwirrt ;)
Member: Biber
Biber May 07, 2008 at 15:25:58 (UTC)
Goto Top
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..?
Member: Landstreicher
Landstreicher May 09, 2008 at 07:25:47 (UTC)
Goto Top
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.

@echo off & Setlocal EnableDelayedExpansion
title sortiere Daten um fuer 9100000988 ....

FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CDATE=%%c%%b%%a  
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonat=%%b  
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonjahr=%%c%%b  

::ren %Ziel% %cdate%

:: Variablenbelegung nach OS:
:: WinNT: a = Wochentag, b = Monat, c = Tag, d = Jahr
:: WinXP: a = Tag, b = Monat, c = Jahr, d= Wochentag

:: In diesem Fall: 15-10-Mi (Unter Win2000) und 2003-10-15 (unter XP)

::------------------------------------------------------------------------------------------
Set /a max=0
set ordner=9100000988_%Cmonjahr%
set quelle=\\w8n00278\P800\9100000988_%Cmonjahr%*.csv
set ziel=\\w8n00278\P800\%ordner%\9100000988_%Cmonjahr%*.csv
echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG > \\w8n00278\P800\%ordner%\PPW_auswertung.csv
echo Jahr Monat = %Cmonjahr%
echo Monat=%Cmonat%

for /f "delims=" %%a in ('dir /b /tc \\w8n00278\P800\%ordner%\9100000988_%Cmonjahr%*_P800_DB.csv') do call :ProcessFile2 "%%a"   
goto :eof
:ProcessFile2
set "Var=%~1"  
echo %Var%
for /f "skip=1 tokens=1-10 delims=;" %%a in (\\w8n00278\P800\%ordner%\%Var%) do (  
        If %%i GTR !max! Set /a "max=%%i"  
        echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i >> \\w8n00278\P800\%ordner%\PPW_auswertung.csv
)



::FindStr+Suche exakt+am Ende der Zeile+ nach der Zeichenkette "Semikolon+Leerzeichen+%max%" "inDatei" 
echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG > \\w8n00278\P800\%ordner%\PPW_hoechstwert.csv
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
Member: Biber
Biber May 09, 2008 at 08:57:27 (UTC)
Goto Top
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:"
...
:: JETZTIGER Zustand.
FindStr /C:"; %max%" \\w8n00278\P800\%ordner%\PPW_auswertung.csv >>\\w8n00278\P800\%ordner%\PPW_hoechstwert.csv  
...
:: Neuer Zustand.
FOR /F "delims=" %%i in ('FindStr /C:"; %max%" \\w8n00278\P800\%ordner%\PPW_auswertung.csv') ') do set "OneMaxLine=%%i"  
Echo.%OneMaxLine%>>\\w8n00278\P800\%ordner%\PPW_hoechstwert.csv

Grüße und gute Besserung
Biber
Member: Landstreicher
Landstreicher May 09, 2008 at 11:21:43 (UTC)
Goto Top
Hallo Biber,

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

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.

@echo on & Setlocal EnableDelayedExpansion
title sortiere Daten um fuer 9100007521 ....

FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CDATE=%%c%%b%%a  
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonat=%%b  
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonjahr=%%c%%b  

::ren %Ziel% %cdate%

:: Variablenbelegung nach OS:
:: WinNT: a = Wochentag, b = Monat, c = Tag, d = Jahr
:: WinXP: a = Tag, b = Monat, c = Jahr, d= Wochentag

:: In diesem Fall: 15-10-Mi (Unter Win2000) und 2003-10-15 (unter XP)

::------------------------------------------------------------------------------------------
Set /a max=0
set ordner=9100007521_%Cmonjahr%
set quelle=\\w8n00278\P800\9100007521_%Cmonjahr%*.csv
set ziel=\\w8n00278\P800\%ordner%\9100007521_%Cmonjahr%*.csv
echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG > \\w8n00278\P800\%ordner%\PPW_auswertung.csv
echo Jahr Monat = %Cmonjahr%
echo Monat=%Cmonat%

for /f "delims=" %%a in ('dir /b /tc \\w8n00278\P800\%ordner%\9100007521_%Cmonjahr%*_P800_DB.csv') do call :ProcessFile4 "%%a"   
goto :eof
:ProcessFile4
set "Var=%~1"  
echo %Var%
for /f "skip=1 tokens=1-10 delims=;" %%a in (\\w8n00278\P800\%ordner%\%Var%) do (  
        If %%i GTR !max! Set /a "max=%%i"  
        echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i >> \\w8n00278\P800\%ordner%\PPW_auswertung.csv
)



::FindStr+Suche exakt+am Ende der Zeile+ nach der Zeichenkette "Semikolon+Leerzeichen+%max%" "inDatei" 
echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG > \\w8n00278\P800\%ordner%\PPW_hoechstwert.csv
FOR /F "delims=" %%i in ('FindStr /C:"; %max%" \\w8n00278\P800\%ordner%\PPW_auswertung.csv') do set "OneMaxLine=%%i"  
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
Member: Biber
Biber May 10, 2008 at 12:51:39 (UTC)
Goto Top
Moin Strandgleiter,

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

Fakt ist, trotz "setlocal EnableDelayedExpansion wird in diesem Block..
for /f "skip=1 tokens=1-10 delims=;" %%a in (\\w8n00278\P800\%ordner%\%Var%) do (  
        If %%i GTR !max! Set /a "max=%%i"  
        echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i >> \\w8n00278\P800\%ordner%\PPW_auswertung.csv
)
...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:
:Processfile
...
for /f "skip=1 tokens=1-10 delims=;" %%a in (\\w8n00278\P800\%ordner%\%Var%) do (  
        For /f "delims== tokens=2" %%x in ('set max') do IF %%i GTR %%x Set /a "max=%%i"  
        echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i >> \\w8n00278\P800\%ordner%\PPW_auswertung.csv
)
b) Andere Variante wäre, einen Call-Block aufzurufen, was dann ungefähr so ästhetisch aussehen würde *würg*:
:SetMymax Parameter1von1 ist der mit %max% zu vergleichende Wert
If %1 GTR %max% Set /a "max=%1"  
goto: eof

:Processfile
...
for /f "skip=1 tokens=1-10 delims=;" %%a in (\\w8n00278\P800\%ordner%\%Var%) do (  
        call :SetMyMax %%i
        echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i >> \\w8n00278\P800\%ordner%\PPW_auswertung.csv
)
...

Sollte mir noch ein Licht aufgehen, wo der Denk-/Syntaxfehler liegt, dann bist Du einer der ersten, die es erfahren.

Grüße
Biber
Member: bastla
bastla May 11, 2008 at 18:36:29 (UTC)
Goto Top
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:
@echo off & Setlocal EnableDelayedExpansion
set Pfad=\\w8n00278\P800
set "Pre=9100007521"  

title sortiere Daten um fuer %Pre% ....

FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CDATE=%%c%%b%%a  
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonat=%%b  
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonjahr=%%c%%b  

::ren %Ziel% %cdate%

:: Variablenbelegung nach OS:
:: WinNT: a = Wochentag, b = Monat, c = Tag, d = Jahr
:: WinXP: a = Tag, b = Monat, c = Jahr, d= Wochentag

:: In diesem Fall: 15-10-Mi (Unter Win2000) und 2003-10-15 (unter XP)

::------------------------------------------------------------------------------------------

set ordner=%Pre%_%Cmonjahr%
Set /a max=0

echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG >%Pfad%\%ordner%\PPW_auswertung.csv
echo Jahr Monat = %Cmonjahr%
echo Monat=%Cmonat%

for /f "delims=" %%a in ('dir /b /tc /od %Pfad%\%ordner%\%Pre%_%Cmonjahr%*_P800_DB.csv') do call :ProcessFile4 "%%a"   
goto :eof

:ProcessFile4
set "Var=%~1"  
echo %Var%
for /f "skip=1 tokens=1-10 delims=;" %%a in (%Pfad%\%ordner%\%Var%) do (  
        If %%i GTR !max! Set /a "max=%%i"  
        (echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i)>>%Pfad%\%ordner%\PPW_auswertung.csv
)

::FindStr+Suche exakt+am Ende der Zeile+ nach der Zeichenkette "Semikolon+Leerzeichen+%max%" "inDatei" 
echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG >%Pfad%\%ordner%\PPW_hoechstwert.csv
FOR /F "delims=" %%i in ('FindStr /E /C:"; %max%" %Pfad%\%ordner%\PPW_auswertung.csv') do set "OneMaxLine=%%i"  
Echo\%OneMaxLine%>>%Pfad%\%ordner%\PPW_hoechstwert.csv
mit diesen beiden Dateien (mit der ersten alleine natürlich auch):
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
und
Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG
9100007521;2008;5;PPW;0;173009;7;373155;30000
9100007521;2008;5;PPW;0;173012;7;373163;33333
9100007521;2008;5;PPW;0;173013;7;373164;27600
Ergebnis ("PPW_hoechstwert.csv"):
Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG 
9100007521; 2008; 5; PPW; 0; 173012; 7; 373163; 33333

Grüße
bastla

P.S.: ... oder habe jetzt ich etwas übersehen?
Member: Landstreicher
Landstreicher May 13, 2008 at 09:05:25 (UTC)
Goto Top
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:
Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG
kann es sein das in der Zeile:
Echo\%OneMaxLine%>>%Pfad%\%ordner%\PPW_hoechstwert.csv

ein fehler ist ?

Grüße "im sand ablaicher" :D
Member: bastla
bastla May 13, 2008 at 09:40:53 (UTC)
Goto Top
Hallo Sandgeeichter!

Vieleicht mit dieser Alternativschreibweise:
>>%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 face-wink)?

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

Grüße
bastla
Member: Landstreicher
Landstreicher May 13, 2008 at 12:51:15 (UTC)
Goto Top
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:


Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG 
9100007521; 2008; 04; PPW; 0; 172889; 7; 360912; 31500                                   
9100007521; 2008; 05; PPW; 0; 172999; 7; 369204; 5800                                    
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 7600                                    
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 7600                                    
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 7600                                    
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 7900                                    
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 8800                                    
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 11600                                   
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 11600                                   
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 11600                                   
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 11600                                   
9100007521; 2008; 05; PPW; 0; 173003; 7; 369204; 11600                                   
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.

@echo off & Setlocal EnableDelayedExpansion
set Pfad=\\w8n00278\P800
set "Pre=9100007521"  

title sortiere Daten um fuer %Pre% ....

FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CDATE=%%c%%b%%a  
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonat=%%b  
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonjahr=%%c%%b  

::ren %Ziel% %cdate%

:: Variablenbelegung nach OS:
:: WinNT: a = Wochentag, b = Monat, c = Tag, d = Jahr
:: WinXP: a = Tag, b = Monat, c = Jahr, d= Wochentag

:: In diesem Fall: 15-10-Mi (Unter Win2000) und 2003-10-15 (unter XP)

::------------------------------------------------------------------------------------------

set ordner=%Pre%_%Cmonjahr%
Set /a max=0

echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG >%Pfad%\%ordner%\PPW_auswertung.csv
echo Jahr Monat = %Cmonjahr%
echo Monat=%Cmonat%

for /f "delims=" %%a in ('dir /b /tc /od %Pfad%\%ordner%\%Pre%_%Cmonjahr%*_P800_DB.csv') do call :ProcessFile4 "%%a"   
goto :eof

:ProcessFile4
set "Var=%~1"  
echo %Var%
for /f "skip=1 tokens=1-10 delims=;" %%a in (%Pfad%\%ordner%\%Var%) do (  
        If %%i GTR !max! Set /a "max=%%i"  
        (echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i)>>%Pfad%\%ordner%\PPW_auswertung.csv
)

::FindStr+Suche exakt+am Ende der Zeile+ nach der Zeichenkette "Semikolon+Leerzeichen+%max%" "inDatei" 
echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG >%Pfad%\%ordner%\PPW_hoechstwert.csv
FOR /F "delims=" %%i in ('FindStr /E /C:"; %max%" %Pfad%\%ordner%\PPW_auswertung.csv') do set "OneMaxLine=%%i"  
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 face-sad ... 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
Member: Biber
Biber May 13, 2008 at 14:46:06 (UTC)
Goto Top
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.
9100007521; 2008; 04; PPW; 0; 172889; 7; 360912; 31500                                   
9100007521; 2008; 05; PPW; 0; 172999; 7; 369204; 5800   
...

Tja, und da die CMD von M$ und schon deshalb schlau ist, nimmt sie doch als Datentyp beim Vergleich...
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
Member: bastla
bastla May 13, 2008, updated at Oct 18, 2012 at 16:35:42 (UTC)
Goto Top
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 ... face-wink
Member: Landstreicher
Landstreicher May 14, 2008 at 09:30:38 (UTC)
Goto Top
Hallo Männers face-wink

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)

Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG
1500000700;2008;04;AO3;2;177826;92;1967415;32200                                
1500000700;2008;04;AO5;2;506009;37;3181070;123660                               
1500000700;2008;04;COG;0;10860;10;6385;400                                      
1500000700;2008;04;EO3;2;97647;77;2020741;15200                                 
1500000700;2008;04;MO4;0;46971;6;34782;450                                      
1500000700;2008;04;P42;0;85726;34;461566;37800                                  
1500000700;2008;04;PO3;2;97683;77;1998141;217400                                
1500000700;2008;04;PO5;2;520734;38;3403745;409320                               
1500000700;2008;04;PONDP;0;33879;7;179035;146400                                
1500000700;2008;04;PONP;2;26930;23;402036;94800                                 
1500000700;2008;04;REPOP;0;12947;7;2135;400                                     
1500000700;2008;04;SO3;2;97658;93;1985357;170600                                
1500000700;2008;04;SO5;2;496609;38;3233573;140940                               
1500000700;2008;04;T42;0;85675;34;444542;15120                                  
1500000700;2008;04;TO3;2;97649;92;1935253;400                                   
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)

Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG 
1500000700;2008;04;AO3;2;177826;92;1967415;32200                                 
1500000700;2008;04;AO3;2;177826;92;1967415;32200                                 
1500000700;2008;05;AO3;2;177826;92;1968967;400                                   
1500000700;2008;05;AO3;2;177826;92;1968967;400                                   
1500000700;2008;05;AO3;2;177826;92;1968967;400                                   
1500000700;2008;05;AO3;2;177828;92;1968967;24000                                 
1500000700;2008;05;AO3;2;177828;92;1968967;24000                                 
1500000700;2008;05;AO3;2;177828;92;1968967;24000                                 
1500000700;2008;05;AO3;2;177828;92;1968967;24000                                 
1500000700;2008;05;AO3;2;177828;92;1968967;24000                                 
1500000700;2008;05;AO3;2;177828;92;1968967;24000                                 
1500000700;2008;05;AO3;2;177828;92;1968967;24000                                 
1500000700;2008;05;AO3;2;177828;92;1968967;24000                                 
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.

@echo off & Setlocal EnableDelayedExpansion
set Pfad=\\w8n00278\P800
set "Pre=1500000700"  

title sortiere Daten um fuer %Pre% ....

FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CDATE=%%c%%b%%a  
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonat=%%b  
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CMonjahr=%%c%%b  

::ren %Ziel% %cdate%

:: Variablenbelegung nach OS:
:: WinNT: a = Wochentag, b = Monat, c = Tag, d = Jahr
:: WinXP: a = Tag, b = Monat, c = Jahr, d= Wochentag

:: In diesem Fall: 15-10-Mi (Unter Win2000) und 2003-10-15 (unter XP)

::------------------------------------------------------------------------------------------

set ordner=%Pre%_%Cmonjahr%
Set /a max=0


echo Jahr Monat = %Cmonjahr%
echo Monat=%Cmonat%

for /f "delims=" %%a in ('dir /b /tc /od %Pfad%\%ordner%\AO3_auswertung.csv') do call :ProcessFile4 "%%a"   
goto :eof

:ProcessFile4
set "Var=%~1"  
echo %Var%
for /f "skip=1 tokens=1-10 delims=; " %%a in (%Pfad%\%ordner%\%Var%) do (  
        If %%i GTR !max! Set /a "max=%%i"  
        (echo %%a; %%b; %%c; %%d; %%e; %%f; %%g; %%h; %%i)
)

echo %max%
::FindStr+Suche exakt+am Ende der Zeile+ nach der Zeichenkette "Semikolon+Leerzeichen+%max%" "inDatei" 
echo Co;Jahr;Monat;Instanz;AnzDBLinks;AnzDBObjekte;AnzTableSpaces;DBSizeMB;TAV_MB_TAG >%Pfad%\%ordner%\AO3_hoechstwert.csv
FOR /F "delims=" %%i in ('FindStr /E /C:"; %max%" %Pfad%\%ordner%\AO3_auswertung.csv') do set "OneMaxLine=%%i"  
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 face-smile
Member: Biber
Biber May 14, 2008 at 11:16:50 (UTC)
Goto Top
Moin Langbleiber,

ist die Umkehrung unserer Kommentare von gestern.

Wenn mittlerweile eine Zeile in der AO3_hoechstwert.csv so aussieht:
1500000700;2008;04;AO3;2;177826;92;1967415;32200 
statt wie gestern früh noch..
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
Member: Landstreicher
Landstreicher May 15, 2008 at 06:35:44 (UTC)
Goto Top
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)