Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1636 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Supprimer des lignes d'un .srt grâce à un .bat

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Supprimer des lignes d'un .srt grâce à un .bat

n°2153342
Madadayo
Posté le 15-08-2012 à 12:28:32  profilanswer
 

Je suis sous Windows XP. Je souhaite supprimer la ligne contenant "www.unsite.org" et "MKV" dans un fichier .srt (fichier de sous-titres) en cliquant sur un bat. Le .srt se trouve dans le même dossier que le bat.  
 
Le fichier .srt ressemble à ça
 


1
00:00:00,580 --> 00:00:04,937
blablalba
 
2
00:00:06,500 --> 00:00:11,096
blablabla
blblabla
 
3
00:00:12,000 --> 00:00:15,074
From www.unsite.org
 
4
00:00:17,580 --> 00:00:20,219
 
(....)
 
 
1626
02:02:47,000 --> 02:02:50,095
Using MKV  
 


 
J'ai trouvé le batch ci-dessous en googlant, mais ça ne fonctionne pas. J'obtiens un fichier vide.

@echo off
type File.srt | findstr /v "www.unsite.org" | findstr /v "MKV" >outputfile.srt


 
Vous l'aurez deviné, j'y connais rien en programmation. L'un de vous aurait la solution ?  
 


---------------
Script Anti-HS
mood
Publicité
Posté le 15-08-2012 à 12:28:32  profilanswer
 

n°2153394
Madadayo
Posté le 16-08-2012 à 12:19:48  profilanswer
 

Si j'utilise ça :

@echo off
type *.srt | findstr /v "www.unsite.org" | findstr /v "MKV" >outputfile.srt


Le batch fonctionne, mais je voudrais obtenir un .srt distinct pour chaque .srt présent dans le dossier. Là, j'obtiens un seul "outputfile.srt" où sont collés les résultats de tous les srt qui se trouvent dans le dossier. Je ne sais pas par quoi remplacer ">outputfile.srt". J'ai essayé ">*.srt", marche pas  :D
Thoughts?  [:meganne]

 


Message édité par Madadayo le 16-08-2012 à 12:20:48

---------------
Script Anti-HS
n°2153398
gilou
Modérateur
Modzilla
Posté le 16-08-2012 à 13:33:39  profilanswer
 

Et pourquoi devrait on te permettre de virer du fichier le site de la team qui a fait la traduction?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2153400
Madadayo
Posté le 16-08-2012 à 13:57:42  profilanswer
 

Parce que dans le cas qui m'intéresse, les sous-titres viennent d'Opensubtitles. C'est pas vraiment ce que je considère comme la "team" ayant fait la traduction. C'est pas le nom du traducteur ou de sa team. J'ai moi-même uploadé des sous-titres sur ce site (sans avoir mis ces 2 lignes). C'est le site qui les rajoute, pas l'uploader, j'ai vérifié sur mes propres sous-titres. Surtout que la 2ème ligne à supprimer est une pub pour un software. Donc j'ai aucune gêne à les supprimer.  
M'enfin, si tu préfères fermer le topic, fais-le, ça sera pas un drame.


---------------
Script Anti-HS
n°2153401
gilou
Modérateur
Modzilla
Posté le 16-08-2012 à 14:05:34  profilanswer
 

Non non, pas de pb. Si c'est toi ou ta team qui fait le boulot, au contraire, tu as tous mes encouragements.
Le plus simple pour toi serait de récupérer un grep qui tourne sous DOS ou Windows, et de faire un grep -v  
Si une solution perl ne t'embête pas, ça peut se faire aussi en perl facilement.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2153405
gilou
Modérateur
Modzilla
Posté le 16-08-2012 à 14:41:29  profilanswer
 

sinon, ceci devrait faire l'affaire:

Code :
  1. @echo off
  2. FOR %%F IN (*.srt) DO (
  3.    REN %%F %%F.old
  4.    TYPE %%F.old | FINDSTR /V "www.unsite.org" | FINDSTR /V "MKV" >%%F  
  5.    REM ligne suivante sans commentaire si on veut enlever les anciens fichiers
  6.    REM DEL %%F.old
  7. )


 
EDIT: il y a plus simple:

Code :
  1. @echo off
  2. FOR %%F IN (*.srt) DO (
  3.    REN %%F %%F.old
  4.    FINDSTR /V "www.unsite.org MKV" %%F.old >%%F  
  5.    REM ligne suivante sans commentaire si on veut enlever les anciens fichiers
  6.    REM DEL %%F.old
  7. )


A+,


Message édité par gilou le 16-08-2012 à 15:35:03

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2153416
Madadayo
Posté le 16-08-2012 à 16:12:27  profilanswer
 

[:the bloodhound gang] Mais ça ne fonctionne pas  :D  
J'obtiens des fichiers vides. Si j'enlève "DEL %%F.old" de la dernière ligne, je vois les .srt.old vides également.  
 
A tout hasard, j'ai Perl sur mon PC, mais je ne sais pas m'en servir [:tinostar] J'ai cherché comment faire avec Perl tout à l'heure, pas trouvé le bon script. [:transparency]


---------------
Script Anti-HS
n°2153423
gilou
Modérateur
Modzilla
Posté le 16-08-2012 à 18:11:23  profilanswer
 

Citation :

Mais ça ne fonctionne pas

chez moi, sous XP,  ça marche [:souk]  
J'ai copié ton exemple du premier post dans 2 fichiers, toto.srt et tutu.srt, et ça fonctionne sans pb.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2153424
gilou
Modérateur
Modzilla
Posté le 16-08-2012 à 18:12:51  profilanswer
 

Citation :

je vois les .srt.old vides également.

Comme ils sont issus d'un simple rename, c'est que les .srt de départ étaient vides eux aussis :whistle:  
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2153442
Madadayo
Posté le 17-08-2012 à 00:37:46  profilanswer
 

Je vais devenir fou. Je sais pas ce que je fais comme erreur. J'ai essayé plusieurs sous-titres différents.
J'ai copié ça dans un batch:

@echo off
FOR %%F IN (*.srt) DO (
    REN %%F %%F.old
    FINDSTR /V "www.unsite.org MKV" %%F.old >%%F  
    DEL %%F.old
)


J'obtiens des fichiers vides à chaque fois  [:transparency] Je vois la taille passer de xy Ko à 0 Ko.


---------------
Script Anti-HS
mood
Publicité
Posté le 17-08-2012 à 00:37:46  profilanswer
 

n°2153474
gilou
Modérateur
Modzilla
Posté le 17-08-2012 à 12:38:45  profilanswer
 

Essaies avec le premier exemple de ce post, qui a la ligne  
TYPE %%F.old | FINDSTR /V "www.unsite.org" | FINDSTR /V "MKV" >%%F  
ça doit donner la même chose (marchait bien lui aussi sur mes tests) et de plus tu peux tracer en pas a pas:
 
Tu peux tester ceci pour voir ce qui se passe a chaque étape par exemple

Code :
  1. @echo off
  2. FOR %%F IN (*.srt) DO (
  3.    REN %%F %%F.old
  4.    TYPE %%F.old  >%%F.step1
  5.    TYPE %%F.old | FINDSTR /V "www.unsite.org" >%%F.step2
  6.    TYPE %%F.old | FINDSTR /V "www.unsite.org" | FINDSTR /V "MKV" >%%F.step3
  7.    TYPE %%F.old | FINDSTR /V "www.unsite.org MKV" >%%F.step4
  8.    FINDSTR /V "www.unsite.org MKV" %%F.old >%%F.step5
  9. )


 
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2153475
Madadayo
Posté le 17-08-2012 à 13:06:54  profilanswer
 

J'avais aussi essayé la première méthode hier soir. J'obtiens un a.srt.step1 vide. Le a.srt a ce qui est écrit dans le premier post.
Je fais "Nouveau" > document texte. Je l'appelle a.srt et je copie ce qu'y a dans le premier post. Ca me donne un a.srt.step1 vide et le a.srt reste intact.
Mystère  [:transparency]

Message cité 1 fois
Message édité par Madadayo le 17-08-2012 à 13:07:22

---------------
Script Anti-HS
n°2153480
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-08-2012 à 13:42:35  profilanswer
 

Bon et sinon, que pensez vous de laisser tomber ce foutu langage batch qui doit être aussi vieux que Gilou et d'utiliser Powershell, qui est un peu plus contemporain et inclus d'office avec tous les PC sous Win 7 ? :o
 

Code :
  1. Get-Content .\source.srt | Where-Object {$_ -notmatch 'www.unsite.org'} | out-file destination.srt


---------------
J'ai un string dans l'array (Paris Hilton)
n°2153495
gilou
Modérateur
Modzilla
Posté le 17-08-2012 à 14:24:09  profilanswer
 

Madadayo a écrit :

J'avais aussi essayé la première méthode hier soir. J'obtiens un a.srt.step1 vide. Le a.srt a ce qui est écrit dans le premier post.
Je fais "Nouveau" > document texte. Je l'appelle a.srt et je copie ce qu'y a dans le premier post. Ca me donne un a.srt.step1 vide et le a.srt reste intact.  
Mystère  [:transparency]

C'est vraiment bizarre, car je ne fais rien d'autre sur ma bécane et ça marche. :??:  
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2153497
gilou
Modérateur
Modzilla
Posté le 17-08-2012 à 14:28:39  profilanswer
 

Euh, ils seraient pas en read-only, tes fichiers de départ, ce qui expliquerait l'échec d'un rename et des opérations qui s'en suivent?
Parce que avec mon batch pas a pas, si le step1 est vide, c'est que le REN a échoué, et donc que le fichier ne peut pas être renommé.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2153504
Madadayo
Posté le 17-08-2012 à 14:58:20  profilanswer
 

L'attribut "Lecture seule" n'est pas coché. Je viens d'essayer sur mon autre PC. Ca me fait la même chose, un a.srt.step1 vide. [:transparency]
 
Enfin bon, c'est pas si important.


---------------
Script Anti-HS
n°2153505
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-08-2012 à 15:11:17  profilanswer
 

et moi, je pue du cul ? [:sadnoir]


---------------
J'ai un string dans l'array (Paris Hilton)
n°2153506
gilou
Modérateur
Modzilla
Posté le 17-08-2012 à 15:15:39  profilanswer
 

Avec mon script en plusieurs étapes, tu as le .old vide (cas d'échec du REN) ou pas vide quand le step1 l'est?
parce que si le .old est pas vide, ça voudrait dire que c'est le TYPE %%F.old qui échoue chez toi pour une raison mystérieuse.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2153508
gilou
Modérateur
Modzilla
Posté le 17-08-2012 à 15:17:35  profilanswer
 

Harkonnen a écrit :

et moi, je pue du cul ? [:sadnoir]

il veut que le nom du fichier d'arrivée soit celui de départ et que ça soit lancé sur un match de *.srt...
 
A+,


Message édité par gilou le 17-08-2012 à 15:18:53

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2153512
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-08-2012 à 15:24:07  profilanswer
 

oui bon, suffit juste de modifier le paramètre du Get-Content et de faire un del+rename après, mais ça n'en reste pas moins vrai qu'il serait grand temps de mettre le batch à la poubelle car des alternatives plus modernes et moins idiosyncratiques existent depuis un bail :o


---------------
J'ai un string dans l'array (Paris Hilton)
n°2153517
gilou
Modérateur
Modzilla
Posté le 17-08-2012 à 15:48:10  profilanswer
 

Ben oui, il y a perl... :whistle:  
 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. use Tie::File;
  6.  
  7. foreach (<*.srt> ) {
  8.  tie my @lines, 'Tie::File', $_, recsep => "\n" or die "Can't tie $_ $!";
  9.  @lines = grep(!/www\.unsite\.org|MKV/, @lines);
  10.  untie  @lines;
  11. }


 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Supprimer des lignes d'un .srt grâce à un .bat

 

Sujets relatifs
supprimer des lignes en fonction d'une valeure située sur la 5 eme colSupprimer des lignes
[VBS] Supprimer un bloc de lignes[VBA]Supprimer les lignes identiques rapidement...
Vba supprimer plusieurs lignes if then end ifSupprimer des lignes avec userform
Supprimer plusieurs lignes dans une sélection[Shell] : supprimer des caractères en fin de lignes
Supprimer mot de passe root en lignes de commandesSupprimer des lignes sous Excel
Plus de sujets relatifs à : Supprimer des lignes d'un .srt grâce à un .bat


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR