
@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
Я хочу сделать так, чтобы для первого английского звука было установлено значение по умолчанию = да, а также для первого английского субтитра — значение по умолчанию = да.
Используя скрипт выше, я могу сделать first eng/audio default=yes, но когда я пытаюсь сделать то же самое для eng/subtitle, он ломается. Каждый трек после first eng/subtitle устанавливается как default=yes, когда он должен быть установлен как default=no.
Нужна помощь.
Спасибо.
решение1
Я понимаю, почему. Но я хотел бы, чтобы вы увидели, как вы можете понять, почему.
Я создал файл со строками типа
g:0:eng:Video
g:1:eng: Audio
Это по сути отражает ваш файл %%B - это трек %%C - это язык %%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.
Вся логика вашей программы должна быть переосмыслена, потому что она не основана на количестве, которое вы хотите сделать, или не только на количестве. Это должно быть a) когда она попадает на первый субтитр/аудио b) когда она попадает на него в первый раз
Я добавил 2 новые переменные. eng_aud_flag и eng_sub_flag
Есть куча утверждений, которые повторяют то, что я использовал для поиска ошибок, которые я сделал, переписывая логику программы. Я оставил эти утверждения там REMd out, так что у вас есть представление о том, как отлаживать
В какой-то момент я задался вопросом, почему некоторый код не выполняется, поэтому я поместил туда оператор echo, говоря GOT HERE, а затем я выяснил, почему он не выполняется, и исправил это. После этого мне больше не нужно это echo, но я оставил его там REMd out, чтобы у вас было представление о том, как отлаживать вещи.
@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>