Loop-Zähler funktioniert nicht

Loop-Zähler funktioniert nicht
@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

Ergebnis:

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

Ich möchte den ersten technischen Ton auf die Standardeinstellung „Ja“ setzen und auch den ersten technischen Untertitel auf die Standardeinstellung „Ja“.

Mit dem obigen Skript kann ich die erste englische/Audiospur auf „default=yes“ setzen, aber wenn ich das Gleiche für englische/Untertitel mache, funktioniert es nicht. Jeder Titel nach der ersten englischen/Untertitelspur wird auf „default=yes“ gesetzt, obwohl er auf „default=no“ gesetzt sein sollte.

Hilfe benötigen.

Danke.

Antwort1

Ich verstehe, warum. Aber ich möchte, dass Sie sehen, wie Sie das verstehen können.

Ich habe eine Datei mit Zeilen wie

g:0:eng:Video
g:1:eng: Audio

Das spiegelt im Wesentlichen Ihre Datei wider. %%B ist Spur, %%C ist Sprache, %%D ist Typ

Ich war mir zunächst nicht sicher, warum das Programm falsch funktionierte. Aber dann fügte ich diese Zeilen hinzu:

echo eac=!eng_aud_count!
echo esb=!eng_sub_count!
pause

Jetzt sollten Sie sehen, was Ihr Programm macht und warum es für Audio funktioniert, aber nicht für Untertitel.

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 . . .

^^^^^^^^^ ALLES IST OK

8---eng--- Subtitle---yes--1
eac=3
esb=1

^^^^ DAS IST GUT

Press any key to continue . . .
9---spa--- Subtitle---yes--1
eac=3
esb=1
Press any key to continue . . .

^^^^^^^ DA LIEGT DAS PROBLEM: Sieh, das ESB ist aus Sicht der Logik deines Programms falsch. Und drücke weiter eine beliebige Taste, um fortzufahren, sieh, das ESB ist 1. In der Logik deines Programms bedeutet esb=1 (Anzahl englischer Untertitel == 1), dass du beim ersten bist und du möchtest, dass default=yes für den ersten und nur den ersten ist. Aber das wird das ESB natürlich nicht widerspiegeln. Denn wenn du später Untertitel eingibst, Französisch, Spanisch, was auch immer, wird dein Zähler immer noch 1 sein.

Die gesamte Logik Ihres Programms muss überdacht werden, da es nicht auf der Anzahl basiert, die Sie ausführen möchten, oder nicht nur auf der Anzahl. Es muss a) sein, wenn es den ersten Untertitel/das erste Audio erreicht, b) wenn es ihn zum ersten Mal erreicht

Ich habe 2 neue Variablen hinzugefügt. eng_aud_flag und eng_sub_flag

Es gibt eine Menge Anweisungen, die Dinge wiederholen, die ich verwendet habe, um Fehler zu finden, die ich beim Umschreiben der Programmlogik gemacht habe. Ich habe diese Anweisungen dort gelassen und sie weggelassen, damit Sie eine Vorstellung davon haben, wie Sie debuggen können.

Irgendwann habe ich mich gewundert, warum ein bestimmter Code nicht ausgeführt wurde. Also habe ich dort eine Echo-Anweisung mit dem Inhalt „GOT HERE“ eingefügt. Dann habe ich herausgefunden, warum er nicht ausgeführt wurde, und das Problem behoben. Ich brauche dieses Echo dann nicht mehr, habe es aber dort gelassen und es als REMd ausgegeben, damit Sie eine Vorstellung davon haben, wie Sie Dinge debuggen können.

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

verwandte Informationen