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 :

Renommage partiel de tous les fichiers d'un répertoire [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3
    Par défaut Renommage partiel de tous les fichiers d'un répertoire
    Bonjour, après avoir longtemps cherché en vain (ici ou ailleurs ) une solution précise à mon problème, je viens en appeler à votre savoir.

    Voici ma problématique:

    Dans un répertoire donné, j'ai des fichiers d'un certain type qui sont des fichiers *.mdp
    Ces fichiers sont générés automatiquement par un outil tiers et sont nommés de manière incrémentale. Ainsi, j'aurai par exemple les fichiers TEST1.mdp , TEST2.mdp, TEST3.mdp etc.
    Je dois renommer (en BATCH, obligatoirement) tous ces fichiers MDP en leur ajoutant un Timestamp entre le nom "TEST" et le numéro incrémental donné.
    Ainsi, après traitement, TEST1.mdp doit devenir TEST_TIMESTAMP1.mdp, et de même pour tous les fichiers mdp contenus dans le répertoire de travail.

    Voici où j'en suis de mes recherches de solution:

    Pour l'instant, j'ai pu avancer un peu sur le traitement à appliquer grâce notamment au sujet suivant:
    http://www.developpez.net/forums/d10...im-repertoire/

    Néanmoins, j'ai exactement le même problème que ce qui est mentionné dans le post #7 de ce topic , à savoir que le premier fichier est traité deux fois, et contient donc un double renommage après exécution du traitement.
    En l'état, si mon répertoire contient par exemple les fichiers TEST1.mdp et TEST2.mdp et que je lancer mon traitement, j'obtiens en sortie les fichiers TEST_TIMESTAMP_TIMESTAMP1.mdp (pas bon ) et TEST_TIMESTAMP2.mdp (Bon! )

    Le code que j'utilise actuellement est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    setlocal enabledelayedexpansion
    for %%i in (*.mdp) do (
    set n=%%i
    set x=!n:TEST=TEST_%CHRONO%!
    ren !n! !x!
    )                   
    endlocal
    Savez-vous, au regard de cette portion de code et en considérant que ma variable %CHRONO% fonctionne en tant que valeur du TIMESTAMP, pourquoi la boucle effectue un double remplacement sur un des fichiers traités? Je pense que cela provient d'une mauvaise utilisation de la boucle FOR? Ou est-ce lié à l'usage de %%i?
    J'ai essayé de lire un peu les aides associées aux commandes.. J'ai beaucoup de mal à les digérer, je suis plutôt néophyte en batch

    Par ailleurs, le code utilisé est-il plutôt sensé ou y a -t- il mieux à faire dans ce genre de cas?

    Je précise, si c'est nécessaire, que j'ai pas mal fait de recherches et de tests avant de poster et que ce dernier souci récurrent va finir par avoir ma peau!..

    Merci d'avance pour vos réponses!

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut
    Je pense que ca vient du fait que lorsque tu renommes le fichier dans le même répertoire, la boucle le prend en compte comme un nouveau fichier.
    Après, pourquoi uniquement le premier, je ne sais pas.

    Je ferais un truc du genre :
    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
    setlocal enabledelayedexpansion
    mkdir test
    
    for %%i in (*.mdp) do (
    set n=%%i
    set x=!n:TEST=TEST_TIMEST!
    copy !n! test\!x!
    del !n!
    )  
         
    for %%i in (test\*.mdp) do (
    move %%i %%~nxi
    )
    
    rmdir /Q test
    endlocal
    pause

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3
    Par défaut
    Bon, j'ai résolu ce problème grâce à un contact qui m'a donné le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for /f "tokens=1-2 delims=TEST" %%a in ('dir /b %REP%\*.mdp') do (
    ren TEST%%a TEST_%CHRONO%%%a
    )
    Avec, évidemment, %REP% et %CHRONO% définies au préalable et qui sont respectivement le répertoire de travail pour %REP% et la valeur du Timestamp (au moment du lancement du batch) pour %CHRONO%.

    Le renommage ne s'effectue maintenant qu'une seule fois.

    Merci du coup quand même!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. boucle analyser tous les fichiers d'un répertoire
    Par petitange_lili dans le forum Langage
    Réponses: 1
    Dernier message: 24/03/2007, 20h02
  2. Copier tous les fichiers d'un répertoire vers un autre
    Par papilou86 dans le forum Langage
    Réponses: 1
    Dernier message: 09/09/2006, 01h02
  3. Réponses: 2
    Dernier message: 15/08/2006, 16h43
  4. Traiter tous les fichiers d'un répertoir sans les MFC.
    Par radicalrider dans le forum MFC
    Réponses: 12
    Dernier message: 21/06/2006, 17h18
  5. Réponses: 4
    Dernier message: 24/09/2004, 10h17

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