banshe
Goto Top

Batch - Suche grösste Zahl in Textfile und kopiere eine andere Zahl aus dieser Zeile

Hallo zusammen

Meine Batch Kenntnisse sind sehr bescheiden! Ich probiere aktuell etwas zusammen-zu-bauen...

Ich habe ein Textdokument das in wie folgt aufgebaut ist:

ID_DVD_TITLE_4_LENGTH=182.960
ID_DVD_TITLE_5_LENGTH=867.920
ID_DVD_TITLE_6_LENGTH=266.760
ID_DVD_TITLE_7_LENGTH=7766.480
ID_DVD_TITLE_8_LENGTH=652.360
ID_DVD_TITLE_9_LENGTH=212.720


Nun möchte ich mit einem Batch die höchste Zahl in diesem Textdokument suchen - in diesem Beispiel "7766.480" - und aus dieser Zeile die Zahl "7" in eine Variable schreiben.

Schlussendlich benötige ich nur eine Variable mit (in diesem Beispiel) der Zahl "7" drinnen.


Wie stelle ich das an?
Bitte um hilfe!

Herzlichen Dank!

Content-ID: 192961

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

Ausgedruckt am: 23.11.2024 um 04:11 Uhr

pieh-ejdsch
pieh-ejdsch 18.10.2012 aktualisiert um 13:57:47 Uhr
Goto Top
moin,

gibt es Title_10 und folgende auch noch?

wenn ja dann so: auf der CMD-Line
(for /f "usebackqtokens=1,2delims==" %i in ("datei") do @echo %j)|sort /r >Test && <"Datei" set /p "Zahl="&cmd /von /c "find "!Zahl!" <"Datei" "  

Gruß Phil
bastla
bastla 18.10.2012 aktualisiert um 17:56:15 Uhr
Goto Top
... ansonsten zB als Batch
@echo off & setlocal enabledelayedexpansion
set "Ein=D:Textdokument.txt"  

set /a Max=0
set /a Title=0
for /f "usebackq tokens=4,6,7 delims=_=." %%i in ("%Ein%") do (  
    if %%j%%k gtr !Max! (
        set /a Max=%%j%%k
        set /a Title=%%i
    )
)
echo %Title% mit %Max% Groesse
Grüße
bastla

[Edit] @ PH: Mit "sort" wirst Du aber "7766.480" nicht als größte Zahl erhalten ... [/Edit]
banshe
banshe 18.10.2012 um 15:50:35 Uhr
Goto Top
Absolute spitzenklasse!
Danke euch beiden...

Vielen Dank bastla - funktioniert einwandfrei!
banshe
banshe 19.10.2012 um 09:59:18 Uhr
Goto Top
Leider hat sich ein Problem eingeschlichen und das Script ist mir zu komplex als dass ich den Fehler beheben könnte:
In dem Textfile gibt es noch einen haufen anderer Angaben, von denen aber nur eine Zeile schwierigkeiten macht:

ID_DVD_VOLUME_ID=THE_CORE

In dem Beispiel

ID_DVD_TITLE_4_LENGTH=182.960
ID_DVD_TITLE_5_LENGTH=867.920
ID_DVD_TITLE_6_LENGTH=266.760
ID_DVD_TITLE_7_LENGTH=7766.480
ID_DVD_TITLE_8_LENGTH=652.360
ID_DVD_TITLE_9_LENGTH=212.720
ID_DVD_VOLUME_ID=THE_CORE

Bekomme ich die Zahl 0 mit 0 Groesse


Andere Teile der Textdatei wie:

ID_DVD_TITLE_6_ANGLES=1
ID_DVD_TITLE_7_CHAPTERS=20
ID_DVD_TITLE_7_ANGLES=1
ID_DVD_TITLE_8_CHAPTERS=1
ID_DVD_DISC_ID=2D3B5BE310483B7C5EC4111EB4B29396
ID_VIDEO_FORMAT=0x10000002
ID_VIDEO_BITRATE=8000000
ID_VIDEO_WIDTH=720
ID_VIDEO_HEIGHT=576
ID_VIDEO_FPS=25.000
ID_VIDEO_ASPECT=0.0000
Opening video decoder: [mpegpes] MPEG 1/2 Video passthrough
Could not find matching colorspace - retrying with -vf scale...
Opening video filter: [scale]
ID_VIDEO_CODEC=ffmpeg2
Audio: no sound
Starting playback...


Machen keine Probleme...
Bitte um hilfe!

Herzlichen Dank...
pieh-ejdsch
pieh-ejdsch 19.10.2012 aktualisiert um 11:06:43 Uhr
Goto Top
moin Bastla,

[Edit] @ PH: Mit "sort" wirst Du aber "7766.480" nicht als größte Zahl erhalten ... [/Edit]

naja dann muss die nichtzahl eben raus:

@banshe
ersetze Bastlas Zeile 06. mit dieser:
for /f "tokens=4,6,7 delims=_=." %%i in ('find "_TITLE_" ^<"%Ein%" ' ) do (

dann sollte es reichen.

Gruß Phil
banshe
banshe 19.10.2012 um 12:41:26 Uhr
Goto Top
Herzlichen Dank!
Klappt super..

Ich habe mich nun ein bisschen in das Thema "Tokens" und "Delims" eingelesen und verstehe in etwa was es bedeutet. Wirklich anwenden kann ich es jedoch "noch" nicht.

Ich habe noch eine kleine Folgefrage:
Wie kann ich in der Textdatei nach einem String (ID_DVD_VOLUME_ID=) suchen und alles hinter dem "=" in eine Variable packen?

Aus folgender Zeile möchte ich schlussendlich "THE_CORE" in der Variablen:

ID_DVD_VOLUME_ID=THE_CORE

Das Wort hinter dem "=" kann aber ändern... Es kann nur ein Wort sein "ELFENLIED" oder auch mehrere "NEON_GENESIS_EVANGELION". Ob die einzellnen Wörter immer mit einem "_" getrennt sind, weiss ich noch nicht...

Mit "find" kann ich zwar den String finden, wie aber den Rest in eine Variable? Oder macht man das mit dem "for /f"?


Herzlichen Dank!
banshe
banshe 19.10.2012 um 13:33:37 Uhr
Goto Top
Ich hab ne Stunde probiert und habe es selber geschafft! =)

for /f "tokens=2 delims==" %%i in ('find "ID_DVD_VOLUME_ID=" ^<"%Ein%" ' ) do (
set NAME=%%i
)


Danke euch für die Hilfe!