Je peux voir pourquoi. Mais j'aimerais que vous voyiez comment vous pouvez voir pourquoi.
J'ai créé un fichier avec des lignes comme
g:0:eng:Video
g:1:eng: Audio
Cela reflète essentiellement votre fichier %% B est la piste %% C est lang %% D est le type
Au départ, je ne savais pas trop pourquoi le programme n'allait pas. Mais ensuite j'ai ajouté ces lignes-
echo eac=!eng_aud_count!
echo esb=!eng_sub_count!
pause
Vous devriez maintenant voir ce que fait votre programme et pourquoi il fonctionne pour l’audio et non pour le sous-titre.
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 . . .
^^^^^^^^^ TOUT CE QUI EST OK
8---eng--- Subtitle---yes--1
eac=3
esb=1
^^^^ C'EST BON
Press any key to continue . . .
9---spa--- Subtitle---yes--1
eac=3
esb=1
Press any key to continue . . .
^^^^^^^ T IL EST LE PROBLEME voir la esb est fausse du point de vue de la logique de votre programme. Et continuez à appuyer sur n’importe quelle touche pour continuer. Esb est égal à 1. Dans la logique de votre programme, esb = 1 (nombre de sous-titres anglais == 1) signifie que vous êtes au premier rang et que vous souhaitez que default = yes pour le premier et uniquement le premier. un. Mais bien sûr, esb ne va pas refléter cela. Parce que quand vous frapperez les sous-titres plus tard, français, espagnol, peu importe, votre compte sera toujours égal à 1.
Toute la logique de votre programme doit être repensée, car ce n'est pas sur le nombre que vous voulez le faire, ni simplement sur le nombre. Ce doit être a) quand il frappe le premier sous-titre / audio b) la première fois qu'il le frappe
J'ai ajouté 2 nouvelles variables. eng_aud_flag et eng_sub_flag
Il y a une foule de déclarations faisant écho à des choses que j'avais l'habitude de trouver pour corriger les erreurs que j'ai commises lors de la réécriture de la logique du programme. J'ai laissé ces déclarations là REMd out, de sorte que vous avez une idée de la façon de déboguer
À un moment donné, je me suis demandé pourquoi certains codes n'étaient pas exécutés. J'ai donc placé une déclaration d'écho indiquant GOT HERE, puis j'ai découvert pourquoi il ne s'exécutait pas et je l'ai corrigé. Je n'ai alors plus besoin de cet écho, mais je l'ai laissé là. Vous avez donc une idée de la façon de déboguer les choses.
@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>