
@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
Lo que quiero hacer es hacer que el primer audio en inglés tenga el valor predeterminado = sí, y también hacer que el primer subtítulo en inglés tenga el valor predeterminado = sí.
Usando el script anterior puedo hacer que el primer inglés/audio sea predeterminado = sí, pero cuando hago lo mismo para inglés/subtítulos, se rompe. Cada pista después del primer inglés/subtítulo se configura como predeterminado=yes cuando debería configurarse como predeterminado=no.
Necesito ayuda.
Gracias.
Respuesta1
Puedo ver porque. Pero me gustaría que vieras cómo puedes ver por qué.
Creé un archivo con líneas como
g:0:eng:Video
g:1:eng: Audio
Eso esencialmente refleja su archivo %%B es la pista %%C es el idioma %%D es el tipo
Al principio no estaba seguro de por qué el programa funcionaba mal. Pero luego agregué estas líneas-
echo eac=!eng_aud_count!
echo esb=!eng_sub_count!
pause
Ahora deberías ver qué está haciendo tu programa y por qué funciona para audio y no para subtítulos.
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 . . .
^^^^^^^^^ TODO ESTÁ BIEN
8---eng--- Subtitle---yes--1
eac=3
esb=1
^^^^ ESO ES BUENO
Press any key to continue . . .
9---spa--- Subtitle---yes--1
eac=3
esb=1
Press any key to continue . . .
^^^^^^^ AHI ESTA EL PROBLEMA mira el esb esta mal desde el punto de vista de la logica de tu programa. Y siga presionando cualquier tecla para continuar, vea que esb es 1. En la lógica de su programa, esb=1 (recuento de subtítulos en inglés == 1) significa que está en el primero y desea default=yes para el primero y solo para el primero. uno. Pero, por supuesto, esb no va a reflejar eso. Porque cuando llegues a los subtítulos posteriores, francés, español, lo que sea, tu recuento seguirá siendo 1.
Se debe repensar toda la lógica de su programa, porque no se basa en el conteo de si desea hacerlo, o no solo en el conteo. Tiene que ser a) cuando llega al primer subtítulo/audio b) la primera vez que aparece
Agregué 2 nuevas variables. eng_aud_flag y eng_sub_flag
Hay un montón de declaraciones que hacen eco de cosas que solía encontrar errores que cometí al reescribir la lógica del programa. Dejé esas declaraciones ahí REMd, para que tengas una idea de cómo depurar
En un momento me pregunté por qué no se estaba ejecutando algún código, así que puse una declaración de eco que decía LLEGO AQUÍ, y luego descubrí por qué no se estaba ejecutando y lo arreglé. Entonces ya no necesito ese eco, pero lo dejé ahí REMd para que tengas una idea de cómo depurar cosas.
@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>