
@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
Resultado:
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
O que eu quero fazer é tornar o primeiro áudio do inglês padrão = sim, e também tornar o primeiro inglês da legenda padrão = sim.
Usando o script acima, consigo fazer o primeiro eng/audio default=yes, mas quando vou fazer o mesmo para eng/subtitle ele quebra. Cada faixa após o primeiro eng/subtítulo é definida como padrão = sim, quando deveria ser definida como padrão = não.
Precisa de alguma ajuda.
Obrigado.
Responder1
Eu posso ver o porquê. Mas eu gostaria que você visse como você pode entender o porquê.
Eu criei um arquivo com linhas como
g:0:eng:Video
g:1:eng: Audio
Isso essencialmente reflete seu arquivo %%B é a trilha %%C é lang %%D é o tipo
Eu não tinha certeza inicialmente por que o programa estava errado. Mas então eu adicionei estas linhas-
echo eac=!eng_aud_count!
echo esb=!eng_sub_count!
pause
Agora você deve ver o que seu programa está fazendo e por que funciona para áudio e não para legenda.
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 . . .
^^^^^^^^^ TUDO ESTÁ OK
8---eng--- Subtitle---yes--1
eac=3
esb=1
^^^^ ISSO É BOM
Press any key to continue . . .
9---spa--- Subtitle---yes--1
eac=3
esb=1
Press any key to continue . . .
^^^^^^^ HÁ O PROBLEMA veja que o esb está errado do ponto de vista da lógica do seu programa. E continue pressionando qualquer tecla para continuar, veja esb é 1. Na lógica do seu programa, esb=1 (contagem de legendas em inglês == 1) significa que você está no primeiro e deseja default=yes para o primeiro e apenas o primeiro um. Mas é claro que o esb não refletirá isso. Porque quando você clicar nas legendas posteriores, francês, espanhol, o que for, sua contagem ainda será 1.
Toda a lógica do seu programa tem que ser repensada, pois não é baseado na contagem que você quer fazer, ou não apenas na contagem. Tem que ser a) quando tocar na primeira legenda/áudio b) na primeira vez que tocar
Eu adicionei 2 novas variáveis. eng_aud_flag e eng_sub_flag
Há um monte de declarações que ecoam coisas que usei para encontrar erros que cometi ao reescrever a lógica do programa. Eu deixei essas declarações aí REMd, então você tem uma ideia de como depurar
A certa altura, me perguntei por que algum código não estava sendo executado, então coloquei uma instrução echo dizendo GOT HERE, e então descobri por que não estava sendo executado e consertei. Não preciso mais desse eco, mas deixei-o aí REMd para que você tenha uma ideia de como depurar as coisas.
@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>