-2
@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

Результат:

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

То, что я хочу сделать, это сделать первый английский аудио по умолчанию = да, а также сделать первый английский субтитры по умолчанию = да.

Используя приведенный выше скрипт, я могу сделать первый eng/audio default = yes, но когда я делаю то же самое для eng/subtitle, он ломается. Каждый трек после первого англ / субтитра устанавливается по умолчанию = да, когда он должен быть установлен по умолчанию = нет.

Нужна помощь.

Благодарю.

1 ответ1

1

Я понимаю почему. Но я хотел бы, чтобы вы увидели, как вы можете понять почему.

Я создал файл с такими строками, как

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>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .