banshe
Goto Top

Batch - Auslesen einer Zahl mit Kriterien

Ich arbeite derzeit an einem Batch und stehe gerade an einem Problem’chen an.

Der Batch Script liest mir ein Textdokument aus und gibt mir die letzte Zahl aus der Zeile aus, in welcher ein „de“ ist.

Das Textdokument sieht wie folgt aus:

audio stream: 0 format: ac3 (5.1) language: en aid: 128.
audio stream: 1 format: ac3 (5.1) language: de aid: 129.
audio stream: 2 format: ac3 (5.1) language: it aid: 130.
audio stream: 3 format: ac3 (6.1) language: en aid: 131.
audio stream: 4 format: ac3 (6.1) language: de aid: 132.
audio stream: 5 format: ac3 (6.1) language: it aid: 133.
audio stream: 6 format: ac3 (stereo) language: en aid: 134.
audio stream: 7 format: ac3 (stereo) language: de aid: 135.
audio stream: 8 format: ac3 (stereo) language: it aid: 136.

Schlussendlich benötige ich nur die letzte Zahl (z.b. 129) ohne dem Punkt am Ende.

Nun möchte ich dass zuerst kontrolliert wird, ob es ein „6.1“ mit „de“ gibt, wenn ja soll er die Zahl entsprechende Zahl (132) nehmen,

wenn nein soll kontrolliert werden, ob es ein „5.1“ mit „de“ gibt, wenn ja soll er die entsprechende Zahl (129) nehmen,

wenn nein soll kontrolliert werden, ob es ein „stereo“ mit „de“ gibt, wenn ja soll er die entsprechende Zahl (135) nehmen,

wenn nein soll kontrolliert werden überhaupt ein „de“ gibt, wenn ja soll er die entsprechende Zahl nehmen.

Ansonnsten soll ein Echo ausgegeben werden….


Mein aktueller Script kann nur auslesen ob es überhaupt ein „de“ gibt…

set "Ein=Textdokument.txt"
for /f "tokens=10 delims= " %%i in ('find "language: de aid:" ^<"%Ein%" ' ) do (
set GERAUDIO=%%i
)
set GERAUDIO=%GERAUDIO:~0,-1% 
Echo German Audio Stream ID is: %GERAUDIO%

Wie kann ich die Auswahl zwischen 5.1, 6.1 und stereo realisieren? Bitte um hilfe…


Herzlichen Dank

Content-Key: 193210

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

Printed on: April 23, 2024 at 10:04 o'clock

Mitglied: 106949
106949 Oct 24, 2012 at 08:26:38 (UTC)
Goto Top
Hallo banshe,

vom Prinzip her würde ich es wieder über eine IF Auswahl mit for-Schleifen machen.

Zuerst in einer for-Schleife nach dem Ausdruck 5.1 suchen. Trifft das nicht zu, suchst du in einer weiteren Schleife nach 6.1. Als else kommt dann ja nur noch stereo in Frage...


LG
Member: banshe
banshe Oct 24, 2012 at 08:49:33 (UTC)
Goto Top
Hallo Stefan

Danke für den hint - werde es versuchen!

Da es manchmal folgenden Aufbau gibt:
audio stream: 1 format: ac3 (5.1/6.1) language: de aid: 129.

möchte ich gerne nach "language: de aid:" UND "5.1" suchen... wie mache ich ein solches UND?

('find "language: de aid:" & "5.1" ^<"%Ein%" ' )

Funktioniert nicht...


Gruss
banshe
Mitglied: 106949
106949 Oct 24, 2012 at 09:26:12 (UTC)
Goto Top
Versuch ein doppeltes '&&'
Member: bastla
bastla Oct 24, 2012 at 09:46:32 (UTC)
Goto Top
Hallo banshe!

Für eine UND-Verknüpfung musst Du zweimal filtern:
'find "language: de aid:"^<"%Ein%"^|find "5.1"'
Grüße
bastla
Member: banshe
banshe Oct 25, 2012 at 05:27:40 (UTC)
Goto Top
Hallo bastla!

Vielen Dank für deine Antwort!
Funktionier face-smile

Wie würde ich in diesem Fall noch ein drittes "find" einbauen?

Folgende Versuche funktionieren nicht:
'find "language: de aid:"^<"%Ein%"^|find "5.1"|find "ac3"'

'find "language: de aid:"^<"%Ein%"^|find "5.1" & "ac3"'

'find "language: de aid:"^<"%Ein%"^|find "5.1" && "ac3"'


Herzlichen Dank
banshe
Member: bastla
bastla Oct 25, 2012 at 07:14:17 (UTC)
Goto Top
Hallo banshe!

Dass Versionen 2 und 3 nicht funktionieren können, ist klar ("&" dient zum Verknüpfen von Befehlen, wobei aber keine Daten weitergegeben werden, und "&&" detto, allerdings mit der Bedingung, dass der vorige Befehl mit Errorlevel 0 - also ohne Fehler - beendet wurde).

Wenn Du Version 1 noch ein Caret spendierst, sollte die funktionieren:
'find "language: de aid:"^<"%Ein%"^|find "5.1"^|find "ac3"'
Grüße
bastla
Member: banshe
banshe Oct 25, 2012 at 09:15:24 (UTC)
Goto Top
Hallo bastla!

Herzlichen Dank für deine Hilfe!
Alles geklappt....

banshe