IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Renommer Dos avec variable


Sujet :

Scripts/Batch

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 82
    Points : 56
    Points
    56
    Par défaut Renommer Dos avec variable
    Bonjour,

    je ne suis pas un spécialiste de la "programmation" sous Dos, du coup je demande votre aide bienveillante.

    Dans un répertoire, j'ai des fichiers venant de plusieurs systèmes différents et se terminant tous par xml.

    Je souhaite pouvoir les renommer automatiquement en fonction de certains éléments.
    Exemple de deux fichiers d'origine : toto321_test.xml et tata5410893_oups.xml

    Je veux pouvoir les renommer en fonction des éléments suivants :

    - tous les fichiers s'appelant toto deviendront "TOT" (mais ça pourrait être une valeur de transcodage que j'irais chercher dans un fichier txt à part)
    - idem pour tata qui deviendrait "pollux" ou toute autre variable
    - puis la date séquencée en année sur 4, mois sur 2 et jour sur 2 digits (bon ça j'avoue je sais faire)
    - et enfin un numéro de séquence (différent pour chaque début de fichier (toto ou tata)), qui serait un numérique sur 5 digits qui s'incrémente à chaque génération de fichier et qui se remet à 0 en début de mois

    Ce qui donnerait pour le fichier toto généré : TOT20151201_00001.txt et pour le 5ème de tata : pollux20151201_00005.txt

    La complexité en fait pour moi est de faire à la fois un transcodage entre toto et TOT à partir d'un fichier texte annexe (sachant que ce fichier me laisserait toute latitude à faire tout autre transcodage). Et à la fois un numéro de séquence qui s'incrémente pour chaque toto ou tata (de façon dissociée) et se remette à 0 en début de mois.

    Merci d'avance de votre aide, ou d'une solution annexe qu'en commande BAT (sachant que celle-ci sera automatisée par une tâche planifiée windows).

  2. #2
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Salut,

    Voilà une solution

    pour la date vu que tu sais faire mets les bonnes valeurs dans $Date (ici j'ai mis une date bidon pour mes tests)

    crée un fichier remplace.txt qui aura la structure suivante :


    remplace.txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    toto=tot
    tata=pollux
    titi=picsou
    tete=donald
    Et le BAT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    @echo off
    
    setlocal enabledelayedexpansion
    
    set "$Date=20151229"
    
    for /f "tokens=1,2 delims==" %%a in (remplace.txt) do (
       for /f "delims=" %%x in ('dir /b/a-d *.xml ^| find /i "%%a"') do (
            set "$fichier=%%~nx"
            set "$fichier=%%b%$Date%_"
            set /a $c=1
            call:incremente !$fichier!
            ren "%%x" "!$fichier!.xml"
        )
    )
    
    exit/b
    
    :incremente
    set "$lead=000000!$c!"
    set "$fichier=%1%$lead:~-5%"
    if /i exist "!$fichier!.xml" (
        set /a $c+=1
        goto:incremente
    )
    ici l'incrementation se fait par rapport au nom de fichier complet (donc pour chaque date différente le compteur se remettra à 1) si tu veux incrementer pour juste le nom c'est également possible.

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 82
    Points : 56
    Points
    56
    Par défaut
    'tain t'es un dieu !!! j'adore !!!

    Ca m'aide déjà plus que grandement.

    J'ai quand même des demandes complémentaires pour parfaire, ce que tu m'as déjà envoyé.

    Le fameux code sur 5 digits qui s'incrémente automatiquement, je voudrais pouvoir l'écrire au milieu du nom final de mon fichier. Sur ce que tu m'as écrit, il se met à la fin.
    J'ai donc fait le test en modifiant un peu la structure de ton bat, ce qui marche, mais uniquement pour un seul fichier par toto ou tata.

    De plus ce code s'incrémente bien à partir du moment où il voit toujours les fichiers d'avant dans le répertoire en question. Sauf que pour ma part ces fichiers vont être supprimés ou déplacés au fur et à mesure. Ce qui fait que le compteur repartira à 0 ... et ça m'arrange pas.

    Et enfin, si jamais dans mon nom de fichier d'origine j'ai une seconde variable qui devra être transcodée dans le nom final, peux-tu me dire la marche à suivre.

    Exemple : fichier origine : toto_vs1 deviendrait tot0212201500001_VAR2.xml où toto est la première variable que tu m'as modifié par le fichier "remplacer.txt" et vs1 la seconde variable que j'aimerais modifié par VAR2

    Merci d'avance

  4. #4
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Bon ça complique un peu le code mais voilà l'idée :


    remplace.txt


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    toto=tot=vs1=var2=1 
    tata=pollux=vs1=vs1=1
    En clair :

    tot remplace toto
    var2 remplace vs1 (Attention cette action ne sera effectué que si vs1 est precedé de _)

    1 correspond à la valeur initial du compteur.
    le fichier remplace.txt et réactualisé à chaque execution du script en gardant la dernère valeur +1 du compteur.
    Ainsi à chaque execution du script il commence à la bonne valeur indèpendemment de ce que tu fais ou du nom du fichier.

    Et le BAT :

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    @echo off
     
    del temp.txt 2>nul
    setlocal enabledelayedexpansion
     
    set "$Date=20151229"
     
    for /f "tokens=1-5 delims==" %%a in (remplace.txt) do (
       set /a "$c=%%e"
       set /a "$Inc=0"
     
       for /f "tokens=1,2 delims=_" %%x in ('dir /b/a-d *.xml ^| find /i "%%a"') do (
            set /a $Inc+=1
            set "$Part2=%%~ny"
            set "$Part2=!$Part2:%%c=%%d!"
            set "$fichier=%%b%$Date%"
            call:incremente !$fichier!
            ren "%%x_%%y" "!$fichier!.xml"
        )
     
    echo %%a ^%^%e [%%e] - $inc [!$inc!]
        set /a $ValFinal=%%e+!$Inc!
        echo %%a=%%b=%%c=%%d=!$ValFinal! >>temp.txt
    )
     
    del remplace.txt
    ren temp.txt remplace.txt
     
    exit/b
     
    :incremente
    set "$lead=000000!$c!"
    set "$fichier=%1%$lead:~-5%_!$Part2!"
    if /i exist "!$fichier!.xml" (
        set /a $c+=1
        goto:incremente
    )



    A tester dans tous les sens avant de mettre en application réel !!!!



    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 82
    Points : 56
    Points
    56
    Par défaut
    Ca complique l'idée, je le conçois, mais on approche pas mal du résultat final.

    J'ai mis en pratique ce que tu m'as donné ce matin, ce qui est bien.
    Par contre je me suis mal exprimé sur la notion de seconde valeur. Car en fait je peux en avoir plusieurs.
    Donc en gros je peux avoir :

    - nom origine : toto_vs1 qui deviendra tot0112201500001_var2
    mais aussi
    - toto_vs2 qui devriendra tot0112201500002_essai
    ou encore :
    - tata_vs1 qui deviendra pollux0112201500001_var2

    avec toutes les combinaisons possibles et imaginables entre les différentes à transcoder.

    Du coup j'ai essayé dans le fichier "remplacer" à mettre :

    toto=tot=vs1=var2=0
    toto=tot=vs2=essai=0
    tata=pollux=vs1=var2=0

    ou

    toto=tot=vs1=var2=0
    tata=pollux=vs2=essai=0

    Mais ça n'a pas fonctionné plus

    Petite subtilité aussi ... les fichiers xml d'origine ... doivent devenir des txt

    Allez ... je sais que tu peux le faire

  6. #6
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    As tu essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    toto=tot=vs1=var2=0
    tot=tot=vs2=essai=0
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 82
    Points : 56
    Points
    56
    Par défaut
    oui ... et pas mieux.

    En toute honnêteté, je ne connais rien en dos ... du coup je suis en train de lire un site tuto afin de comprendre ce que tu m'as fait écrire.
    Et j'avance petit à petit

    Mais j'ai pas encore cette solution.

  8. #8
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Pour commencer il faudrait déjà structurer exactement ce que tu veux pour commencer sur une base saine.

    Les rajouts c'est pas bon en Prog.

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 82
    Points : 56
    Points
    56
    Par défaut
    Je vais essayer d'être un peu plus précis et clair, t'as raison.

    Alors j'ai des fichiers qui vont sortir d'un logiciel et que je dois transmettre à un organisme avec un nom particulier.

    Mes fichiers d'origine auront tous la même trame à savoir : nomsociete-fixe1_fixe2.formatfichier.xml

    Pour info de ces fichiers d'origine :
    - Fixe 1 et Fixe 2 ne seront pas utilisés
    - Formatfichier peut contenir des "_"


    Suite aux différents échanges qu'on a déjà pu avoir, ces fichiers devront être renommés de la façon suivante :

    Fixe3.fixe4.fixe5.dateetcompteurincrémentiel.fixe6.fixe7_var1_var2.var1.fixe8.fixe9.txt

    je sais je sais ... ils ont que ça à foutre

    Pour info des fichiers à générer :
    - les différents "Fixe" peuvent contenir des "_"
    - Var1 est le traduction de mon "nomsociete" (toto=tot dans mes exemples d'avant)
    - Var2 est la traduction de mon "formatfichier" (vs2=essai)

    Et j'insiste sur le fait que ces "xml" d'origine deviennent des "txt"

    Est-ce que c'est plus clair et plus concis dans ce que je souhaite ?

    Merci encore pour ton aide.

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/09/2009, 11h08
  2. Réception sur le port série sous DOS avec Borland V3.0
    Par jackyjacky dans le forum Autres éditeurs
    Réponses: 24
    Dernier message: 19/03/2004, 23h18
  3. Debugger un prog DOS avec SoftIce !
    Par TONIAPEL dans le forum Assembleur
    Réponses: 2
    Dernier message: 20/01/2004, 11h41
  4. Envoi de messages MS DOS avec le IP
    Par asphp dans le forum Développement
    Réponses: 6
    Dernier message: 07/01/2004, 16h11
  5. Cacher Variable Url avec Variable Globale
    Par danuz dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/09/2003, 17h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo