
@echo off
setlocal enableextensions enabledelayedexpansion
set /a eng_aud_count=0
set /a eng_sub_count=0
For /f "tokens=1-9 usebackq delims=.:^)^( skip=2" %%A in ("MY text File") do (
set trck=%%B
set lang=%%C
set type=%%D
If "!type!"==" Audio" (
IF "!lang!"=="eng" (
set /a eng_aud_count+=1
)
)
If "!type!"==" Subtitle" (
IF "!lang!"=="eng" (
set /a eng_sub_count+=1
)
)
set default=no
If "!trck!"=="0" (set default=yes)
IF !eng_aud_count!==1 (set default=yes)
IF !eng_sub_count!==1 (set default=yes)
Echo !trck!---!lang!---!type!---!default!--!eng_sub_count!
)
Exit /b
Endlocal
Ergebnis:
0---eng--- Video---yes--0
1---eng--- Audio---yes--0
2---eng--- Audio---no--0
3---spa--- Audio---no--0
4---fra--- Audio---no--0
5---deu--- Audio---no--0
6---por--- Audio---no--0
7---eng--- Audio---no--0
8---eng--- Subtitle---yes--1
9---spa--- Subtitle---yes--1
10---spa--- Subtitle---yes--1
11---fra--- Subtitle---yes--1
12---fra--- Subtitle---yes--1
13---dan--- Subtitle---yes--1
14---nld--- Subtitle---yes--1
15---fin--- Subtitle---yes--1
16---deu--- Subtitle---yes--1
17---deu--- Subtitle---yes--1
18---nor--- Subtitle---yes--1
19---por--- Subtitle---yes--1
20---por--- Subtitle---yes--1
21---swe--- Subtitle---yes--1
22---eng--- Subtitle---no--2
Ich möchte den ersten technischen Ton auf die Standardeinstellung „Ja“ setzen und auch den ersten technischen Untertitel auf die Standardeinstellung „Ja“.
Mit dem obigen Skript kann ich die erste englische/Audiospur auf „default=yes“ setzen, aber wenn ich das Gleiche für englische/Untertitel mache, funktioniert es nicht. Jeder Titel nach der ersten englischen/Untertitelspur wird auf „default=yes“ gesetzt, obwohl er auf „default=no“ gesetzt sein sollte.
Hilfe benötigen.
Danke.
Antwort1
Ich verstehe, warum. Aber ich möchte, dass Sie sehen, wie Sie das verstehen können.
Ich habe eine Datei mit Zeilen wie
g:0:eng:Video
g:1:eng: Audio
Das spiegelt im Wesentlichen Ihre Datei wider. %%B ist Spur, %%C ist Sprache, %%D ist Typ
Ich war mir zunächst nicht sicher, warum das Programm falsch funktionierte. Aber dann fügte ich diese Zeilen hinzu:
echo eac=!eng_aud_count!
echo esb=!eng_sub_count!
pause
Jetzt sollten Sie sehen, was Ihr Programm macht und warum es für Audio funktioniert, aber nicht für Untertitel.
C:\crp>a
0---eng---Video---yes--0
eac=0
esb=0
Press any key to continue . . .
1---eng--- Audio---yes--0
eac=1
esb=0
Press any key to continue . . .
2---eng--- Audio---no--0
eac=2
esb=0
Press any key to continue . . .
3---spa--- Audio---no--0
eac=2
esb=0
Press any key to continue . . .
4---fra--- Audio---no--0
eac=2
esb=0
Press any key to continue . . .
5---deu--- Audio---no--0
eac=2
esb=0
Press any key to continue . . .
6---por--- Audio---no--0
eac=2
esb=0
Press any key to continue . . .
7---eng--- Audio---no--0
eac=3
esb=0
Press any key to continue . . .
^^^^^^^^^ ALLES IST OK
8---eng--- Subtitle---yes--1
eac=3
esb=1
^^^^ DAS IST GUT
Press any key to continue . . .
9---spa--- Subtitle---yes--1
eac=3
esb=1
Press any key to continue . . .
^^^^^^^ DA LIEGT DAS PROBLEM: Sieh, das ESB ist aus Sicht der Logik deines Programms falsch. Und drücke weiter eine beliebige Taste, um fortzufahren, sieh, das ESB ist 1. In der Logik deines Programms bedeutet esb=1 (Anzahl englischer Untertitel == 1), dass du beim ersten bist und du möchtest, dass default=yes für den ersten und nur den ersten ist. Aber das wird das ESB natürlich nicht widerspiegeln. Denn wenn du später Untertitel eingibst, Französisch, Spanisch, was auch immer, wird dein Zähler immer noch 1 sein.
Die gesamte Logik Ihres Programms muss überdacht werden, da es nicht auf der Anzahl basiert, die Sie ausführen möchten, oder nicht nur auf der Anzahl. Es muss a) sein, wenn es den ersten Untertitel/das erste Audio erreicht, b) wenn es ihn zum ersten Mal erreicht
Ich habe 2 neue Variablen hinzugefügt. eng_aud_flag und eng_sub_flag
Es gibt eine Menge Anweisungen, die Dinge wiederholen, die ich verwendet habe, um Fehler zu finden, die ich beim Umschreiben der Programmlogik gemacht habe. Ich habe diese Anweisungen dort gelassen und sie weggelassen, damit Sie eine Vorstellung davon haben, wie Sie debuggen können.
Irgendwann habe ich mich gewundert, warum ein bestimmter Code nicht ausgeführt wurde. Also habe ich dort eine Echo-Anweisung mit dem Inhalt „GOT HERE“ eingefügt. Dann habe ich herausgefunden, warum er nicht ausgeführt wurde, und das Problem behoben. Ich brauche dieses Echo dann nicht mehr, habe es aber dort gelassen und es als REMd ausgegeben, damit Sie eine Vorstellung davon haben, wie Sie Dinge debuggen können.
@echo off
setlocal enableextensions enabledelayedexpansion
set /a eng_aud_count=0
set /a eng_sub_count=0
set /a eng_aud_flag=false
set /a eng_sub_flag=false
For /f "tokens=1-9 usebackq delims=.:^)^( skip=2" %%A in ("a.a") do (
set trck=%%B
set lang=%%C
set type=%%D
set default=no
If "!type!"==" Audio" (
IF "!lang!"=="eng" (
set /a eng_aud_count+=1
IF !eng_aud_count!==1 (
set /a eng_aud_flag=true
set default=yes
)
)
)
If "!type!"==" Subtitle" (
IF "!lang!"=="eng" (
set /a eng_sub_count+=1
REM echo here
REM echo eng_sub_count==!eng_sub_count!
IF !eng_sub_count!==1 (
REM echo GOOD
set /a eng_sub_flag=true
set default=yes
REM echo here2
)
)
)
If "!trck!"=="0" (set default=yes)
Echo !trck!---!lang!---!type!---!default!--!eng_sub_count!
REM echo eac=!eng_aud_count!
REM echo esb=!eng_sub_count!
REM echo def=!default!
REM echo subflag=!eng_sub_flag!
REM echo audflag=!eng_aud_flag!
REM pause
)
Exit /b
Endlocal
C:\crp>type a.a
g:0:eng:Video
g:1:eng: Audio
g:2:eng: Audio
g:3:spa: Audio
g:4:fra: Audio
g:5:deu: Audio
g:6:por: Audio
g:7:eng: Audio
g:8:eng: Subtitle
g:9:spa: Subtitle
g:10:spa: Subtitle
g:11:fra: Subtitle
g:12:fra: Subtitle
g:13:dan: Subtitle
g:14:nld: Subtitle
g:15:fin: Subtitle
g:16:deu: Subtitle
g:17:deu: Subtitle
g:18:ryt: Subtitle
g:19:por: Subtitle
g:20:por: Subtitle
g:21:swe: Subtitle
g:22:eng: Subtitle
C:\crp>
C:\crp>a
0---eng---Video---yes--0
1---eng--- Audio---yes--0
2---eng--- Audio---no--0
3---spa--- Audio---no--0
4---fra--- Audio---no--0
5---deu--- Audio---no--0
6---por--- Audio---no--0
7---eng--- Audio---no--0
8---eng--- Subtitle---yes--1
9---spa--- Subtitle---no--1
10---spa--- Subtitle---no--1
11---fra--- Subtitle---no--1
12---fra--- Subtitle---no--1
13---dan--- Subtitle---no--1
14---nld--- Subtitle---no--1
15---fin--- Subtitle---no--1
16---deu--- Subtitle---no--1
17---deu--- Subtitle---no--1
18---ryt--- Subtitle---no--1
19---por--- Subtitle---no--1
20---por--- Subtitle---no--1
21---swe--- Subtitle---no--1
22---eng--- Subtitle---no--2
C:\crp>