El contador de bucles no funciona

El contador de bucles no funciona
@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>

información relacionada