Я понимаю почему. Но я хотел бы, чтобы вы увидели, как вы можете понять почему.
Я создал файл с такими строками, как
g:0:eng:Video
g:1:eng: Audio
Это по существу отражает ваш файл %% B - это трек %% C - это lang %% D - это тип
Сначала я не был уверен, почему программа работает неправильно. Но потом я добавил эти строки:
echo eac=!eng_aud_count!
echo esb=!eng_sub_count!
pause
Теперь вы должны увидеть, что делает ваша программа, и почему она работает для аудио, а не для субтитров.
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 . . .
^^^^^^^^^ ВСЕ ЭТО ОК
8---eng--- Subtitle---yes--1
eac=3
esb=1
^^^^ ЭТО ХОРОШО
Press any key to continue . . .
9---spa--- Subtitle---yes--1
eac=3
esb=1
Press any key to continue . . .
^^^^^^^ ЕСТЬ ПРОБЛЕМА, потому что esb неверен с точки зрения логики вашей программы. И продолжайте нажимать любую клавишу, чтобы продолжить, смотрите esb 1. В логике вашей программы esb = 1 (счетчик английских субтитров == 1) означает, что вы находитесь на первом месте, и вы хотите default = yes для первого и только для первого. Но, конечно, ESB не собирается отражать это. Потому что, когда вы нажмете более поздние субтитры, французский, испанский, что угодно, ваш счет все равно будет 1.
Нужно переосмыслить всю логику вашей программы, потому что она основана не на подсчете, который вы хотите сделать, или не только на подсчете. Это должно быть а) когда он попадает в первый субтитр / аудио б) в первый раз, когда он попадает в него
Я добавил 2 новые переменные. eng_aud_flag и eng_sub_flag
Есть множество утверждений, которые перекликаются с вещами, которые я использовал, чтобы найти ошибки, которые я сделал, переписывая логику программы. Я оставил эти утверждения там REMd, так что у вас есть представление о том, как отлаживать
В какой-то момент я удивился, почему какой-то код не выполняется, поэтому я поместил туда эхо-оператор, говорящий «ПОЙДИТЕ ЗДЕСЬ, а затем выяснил, почему он не выполняется», и исправил его. Тогда мне больше не нужно это эхо, но я оставил его там REMd, чтобы у вас была идея, как отлаживать вещи.
@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>