@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 音频设为默认=是,并将第一个 eng 字幕设为默认=是。
使用上述脚本,我能够将第一个 eng/audio 设置为 default=yes,但当我对 eng/subtitle 执行相同操作时,它会中断。第一个 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)表示您处于第一个字幕,并且您希望第一个字幕的默认值为“是”,并且只希望第一个字幕的默认值为“是”。但当然,esb 不会反映这一点。因为当您点击后面的字幕(法语、西班牙语等)时,您的计数仍为 1。
你必须重新考虑程序的整个逻辑,因为你想要做的不是基于计数,或者不仅仅是基于计数。它必须是 a) 当它击中第一个字幕/音频时 b) 第一次击中它
我添加了 2 个新变量。eng_aud_flag 和 eng_sub_flag
有大量语句会回显我用来查找重写程序逻辑时犯的错误的内容。我将这些语句保留在那里,以便您知道如何调试
有一次,我很奇怪为什么有些代码没有执行,所以我放了一个 echo 语句,说 GOT HERE,然后我找到了它没有执行的原因,并修复了它。然后我不再需要那个 echo,但我把它留在那里,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>