@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
Résultat:
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
Ce que je veux faire est de faire en sorte que le premier eng audio soit paramétré par défaut = oui, mais également que le sous-titrage eng soit par défaut = yes.
En utilisant le script ci-dessus, je peux faire d'abord eng / audio default = yes, mais quand je vais faire la même chose pour eng / subtitle, ça casse. Chaque piste après le premier sous-titre est définie comme valeur par défaut = oui, alors qu'elle devrait l'être par défaut = non.
Besoin d'aide.
Merci.
windows
command-line
batch
batch-file
Hbelouf
la source
la source
for /r %a in (a.a) do echo %a
je reçois un message d'erreur, car(a.b) was unexpected at this time.
il s'agit d'un répertoire et non d'un fichier. Alors, vous pourriez peut-être préciser comment votre ligneFor /r %%A in (*Encoded.mkv) do (
est censée fonctionner,IF !eng_aud_count!==1
IF !eng_aud_count!>=1
22---eng--- Subtitle---no--2
et vous ne savez pas si vous voulez que ce soit oui ou non. Aussi, je vous suggère d'écrire un organigramme pour vous aider à comprendre votre code.Réponses:
Je peux voir pourquoi. Mais j'aimerais que vous voyiez comment vous pouvez voir pourquoi.
J'ai créé un fichier avec des lignes comme
Cela reflète essentiellement votre fichier %% B est la piste %% C est lang %% D est le type
Au départ, je ne savais pas trop pourquoi le programme n'allait pas. Mais ensuite j'ai ajouté ces lignes-
Vous devriez maintenant voir ce que fait votre programme et pourquoi il fonctionne pour l’audio et non pour le sous-titre.
^^^^^^^^^ TOUT CE QUI EST OK
^^^^ C'EST BON
^^^^^^^ T IL EST LE PROBLEME voir la esb est fausse du point de vue de la logique de votre programme. Et continuez à appuyer sur n’importe quelle touche pour continuer. Esb est égal à 1. Dans la logique de votre programme, esb = 1 (nombre de sous-titres anglais == 1) signifie que vous êtes au premier rang et que vous souhaitez que default = yes pour le premier et uniquement le premier. un. Mais bien sûr, esb ne va pas refléter cela. Parce que quand vous frapperez les sous-titres plus tard, français, espagnol, peu importe, votre compte sera toujours égal à 1.
Toute la logique de votre programme doit être repensée, car ce n'est pas sur le nombre que vous voulez le faire, ni simplement sur le nombre. Ce doit être a) quand il frappe le premier sous-titre / audio b) la première fois qu'il le frappe
J'ai ajouté 2 nouvelles variables. eng_aud_flag et eng_sub_flag
Il y a une foule de déclarations faisant écho à des choses que j'avais l'habitude de trouver pour corriger les erreurs que j'ai commises lors de la réécriture de la logique du programme. J'ai laissé ces déclarations là REMd out, de sorte que vous avez une idée de la façon de déboguer
À un moment donné, je me suis demandé pourquoi certains codes n'étaient pas exécutés. J'ai donc placé une déclaration d'écho indiquant GOT HERE, puis j'ai découvert pourquoi il ne s'exécutait pas et je l'ai corrigé. Je n'ai alors plus besoin de cet écho, mais je l'ai laissé là. Vous avez donc une idée de la façon de déboguer les choses.
la source