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

Supprimer des lignes d'un .srt grâce à un .bat - Shell/Batch - Programmation

Marsh Posté le 15-08-2012 à 12:28:32    

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
Reply

Marsh Posté le 15-08-2012 à 12:28:32   

Reply

Marsh Posté le 16-08-2012 à 12:19:48    

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
Reply

Marsh Posté le 16-08-2012 à 13:33:39    

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é!  --
Reply

Marsh Posté le 16-08-2012 à 13:57:42    

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
Reply

Marsh Posté le 16-08-2012 à 14:05:34    

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é!  --
Reply

Marsh Posté le 16-08-2012 à 14:41:29    

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é!  --
Reply

Marsh Posté le 16-08-2012 à 16:12:27    

[: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
Reply

Marsh Posté le 16-08-2012 à 18:11:23    

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é!  --
Reply

Marsh Posté le 16-08-2012 à 18:12:51    

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é!  --
Reply

Marsh Posté le 17-08-2012 à 00:37:46    

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
Reply

Marsh Posté le 17-08-2012 à 00:37:46   

Reply

Marsh Posté le 17-08-2012 à 12:38:45    

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é!  --
Reply

Marsh Posté le 17-08-2012 à 13:06:54    

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
Reply

Marsh Posté le 17-08-2012 à 13:42:35    

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)
Reply

Marsh Posté le 17-08-2012 à 14:24:09    

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é!  --
Reply

Marsh Posté le 17-08-2012 à 14:28:39    

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é!  --
Reply

Marsh Posté le 17-08-2012 à 14:58:20    

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
Reply

Marsh Posté le 17-08-2012 à 15:11:17    

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


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 17-08-2012 à 15:15:39    

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é!  --
Reply

Marsh Posté le 17-08-2012 à 15:17:35    

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é!  --
Reply

Marsh Posté le 17-08-2012 à 15:24:07    

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)
Reply

Marsh Posté le 17-08-2012 à 15:48:10    

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é!  --
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed