Transformer script Powershell en batch

Transformer script Powershell en batch - Shell/Batch - Programmation

Marsh Posté le 15-05-2022 à 20:34:37    

Bonjour,
 
j'utilise ce script qui fonctionne bien mais j'aimerais le transformer en batch, pas spécialement un fichier bat mais une commande qui permettrait de l'appliquer à tous les fichiers txt d'un dossier ;
 

Code :
  1. $o=""
  2. $n=0
  3. foreach($line in (Get-Content "K:\vid reso.txt" )){
  4.   $nline = $line.Split("," )
  5.   $nline2=($nline[1]+$nline[2])
  6.   if ($nline2 -ne $preventry) {
  7.     $n0=$nline[0]
  8.     $o="$o,$n0"
  9.     $n=$n0
  10. }
  11.   $preventry = $nline2
  12. }
  13. if ($o.length -gt 1){
  14. echo $o.Remove(0,1) > "K:\vid reso change.txt"
  15. } else {
  16. Write-Host "No resolution changes found" -ForegroundColor Red
  17. }


 
Je voudrais donc qu'il rajoute " change" derrière le nom de la vidéo.
 
Pour info ça sert à analyser un fichier généré par ffprobe qui contient la résolution d'une vidéo, il permet d'indiquer les n° de frames où il y a un éventuel changement de résolution (ce qui peut arriver dans le cas d'un streaming).

Reply

Marsh Posté le 15-05-2022 à 20:34:37   

Reply

Marsh Posté le 17-05-2022 à 10:04:55    

J'avance un peu, j'ai modifié le début et la fenêtre de Powershell affiche bien le contenu du 1er fichier txt du dossier mais il ne termine pas l'opération et j'obtiens toujours un message d'erreur, apparemment c'est juste une histoire de parenthèses ou d'accolades mal placées ;
 

Code :
  1. Get-Content -Path "K:\test\*.txt"
  2. $o=""
  3. $n=0
  4. foreach($line in{
  5.   $nline = $line.Split("," )
  6.   $nline2=($nline[1]+$nline[2])
  7.   if ($nline2 -ne $preventry)) {
  8.     $n0=$nline[0]
  9.     $o="$o,$n0"
  10.     $n=$n0
  11. }
  12.   $preventry = $nline2
  13. }
  14. if ($o.length -gt 1){
  15. echo $o.Remove(0,1) > "K:\test\%~na change.txt"
  16. } else {
  17. Write-Host "No resolution changes found" -ForegroundColor Red
  18. }


 
Je ne suis pas très sûr non plus de la manière de spécifier le nom et le dossier des fichiers à créer pour garder le nom d'origine et rajouter " change" (K:\test\%~na change).


Message édité par arnuche le 17-05-2022 à 10:08:26
Reply

Marsh Posté le 21-05-2022 à 11:17:51    

Je peux te faire ça en java si tu veux.  Tu mets le jar que j'aurai fait dans le dossier que tu veux faire et tu le lances


Message édité par Lt Ripley le 21-05-2022 à 11:18:48

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 21-05-2022 à 11:29:30    

Merci, pourquoi pas mais j'aimerais déjà parvenir à le faire de manière plus basique, je suppose qu'il doit y avoir moyen sans Java.
Je suis habitué aux batchs pour la console basique de Windows, ça commence toujours par for %a in ("..., mais ici ça a l'air différent.

Reply

Marsh Posté le 21-05-2022 à 20:41:25    

Il y a un peu de logique / traitement de texte dans ce script, donc en batch soit c'est impossible soit tu vas en chier. Tourne toi vers Python (ou Perl si tu préfères), mais sous Windows faudra l'installer. Sinon on peut faire ça en C aussi, c'est un poil maso mais ça donnera un seul petit exécutable plutôt que de devoir installer tout un bazar.

Reply

Marsh Posté le 21-05-2022 à 21:09:43    

Ah d'accord, je ne pensais pas que ce serait si compliqué et je n'y connais rien en programmation.

Reply

Marsh Posté le 21-05-2022 à 21:59:22    

Ah ok, tu veux juste modifier un truc existant pour l'appliquer à tout les fichiers, mais tu peux faire ça en Powershell? Car la-dedans c'est visiblement possible. Je n'y connais rien par contre, mais il doit bien y avoir quelqu'un sur le forum pour t'aider. A ta place je modifierais le titre du sujet, genre "appliquer script Powershell à plusieurs fichiers", peut-être tu auras plus de chance...

Reply

Marsh Posté le 21-05-2022 à 22:13:25    

rat de combat a écrit :

Ah ok, tu veux juste modifier un truc existant pour l'appliquer à tout les fichiers, mais tu peux faire ça en Powershell?


Oui, c'est ce que j'expliquais dans le 1er post.

Reply

Marsh Posté le 22-05-2022 à 13:13:09    

C'est pas compliqué, tu récupères la liste des fichiers txt dans ton dossier, et dans ton code actuel tu variabilises les endroits où il y a ton nom de fichier en dur pour l'utiliser dans une boucle.

Code :
  1. $fichiers = get-childitem -Path "K:\test" -Include *.txt -Recurse
  2. foreach ($fichier in $fichiers) {
  3. ....
  4. }
 

Et tu récupère le nom du fichier avec $fichier.Name ou son full path avec $fichier.FullName ou son nom sans extension avec BaseName (si tu veux rajouter ton _changed c'est pratique)


Message édité par Je@nb le 22-05-2022 à 13:20:12
Reply

Marsh Posté le 22-05-2022 à 17:18:42    

Houlà, je ne comprends vraiment pas tout à ton explication  :o  
 
Pour la 2ème ligne, on tape ça tel quel ou il faut remplacer le mot fichier par autre chose ?
 
Concernant le nom d'export (ligne 15 dans mon 1er post), on met quoi à la place de "K:\test\%~na change.txt" ?
 
Et y a-t-il moyen de ne sélectionner que les fichiers dont le nom se termine par " reso" dans le dossier spécifié (et d'y rajouter " change", puisque c'est le but) ?
 
Merci  :jap:


Message édité par arnuche le 22-05-2022 à 17:30:33
Reply

Sujets relatifs:

Leave a Replay

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