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

Windows 7 Discussion :

Création d'un Batch pour renommer dans 3 dossiers


Sujet :

Windows 7

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Création d'un Batch pour renommer dans 3 dossiers
    Bonjour,

    Je voudrai lancer une commande en Batch dans 3 sous dossiers différents (dossier 1, dossier 2, dossier 3) dans ces 3 dossiers les fichiers ont le même nom mais sont différents (je ne peux pas changer leurs noms pour les différenciers sinon ça poserai un problème de fonctionnement). La tache à réaliser est identique pour les 3 dossiers, seule les noms de dossiers change. Le fichier bat se situe à la racine donc en amont et juste après il y a les 3 sous dossiers contenant les 2 fichiers à traiter.

    fichier bat à la racine
    3 sous dossiers :
    >dossier 1 (contenant un fichier Voice.dat et Voice_Anglais.dat)
    >dossier 2 (contenant un fichier Voice.dat et Voice_Anglais.dat differents)
    >dossier 3 (contenant un fichier Voice.dat et Voice_Anglais.dat differents)

    Le but est que ce fichier bat réalise en une seule fois la tache suivante pour ces 3 dossiers.
    Voici la commande du fichier bat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if exist Voice.dat if not exist Voice_Anglais ren Voice.dat Voice_Francais.dat
    ping localhost -n 1 >nul 
    ren Voice_Anglais.dat Voice.dat
    msg * traduction Anglais ok
    Doit-je mettre 3 fois cette fonction pour chaque dossier? (ce qui n'est pas un problème en soit, il faut juste que les 3 taches soit réalisé en même temps) ce qui me pose problème en revanche c'est que dans cette commande je ne sais pas ajouter les sous-dossiers en question car actuellement tel que je l'ai fait c'est valable uniquement si je met le fichier bat à la racine de l'un des 3 dossiers. J'ai essayé "Dossier 1\fichier.dat" mais ça ne fonctionne pas auriez-vous une idée?
    au départ j’étais partis sur le fait de faire 3 fichiers bat dans chacun de ces 3 dossiers et mettre un fichier bat "maitre" à la racine qui lancerai ces 3 fichiers bat en même temps mais je n'ai pas réussi à le faire fonctionner, apparement toujours un probleme avec les sous-dossiers.

    Concernant cette ligne : ping localhost -n 1 >nul
    je l'ai ajouté pour qu'il y ai une attente entre la 1ére action et la 2éme mais je ne suis pas sur que se soit forcement adapté. Existe t-il une autre commande pour que la 3eme ligne attende que la 1ere soit bien effectué?
    Si vous voyez des oublis ou des ajouts possible dans mon fichier bat n’hésitez pas à me le signaler.

    Pour info je ferai un 2éme fichier bat qui fera l'inverse donc Anglais vers Francais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if not exist Voice_Anglais.dat ren Voice.dat Voice_Anglais.dat
    ping localhost -n 1 >nul 
    ren Voice_Francais.dat Voice.dat
    J'ai essayé pas mal de manip mais la je sèche complétement.
    Merci d'avance pour votre aide.

  2. #2
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    bonjour,

    Quel est le but de la manoeuvre ?
    Juste renommer les fichiers si ils existent, c'est bien ça ?

    Quelques remarques :
    Pour changer de répertoire, en batch il faut absolument que tu utilise la commande cd.
    Pour ta remarque sur le ping, j'ai pas tout suivi, mais le batch est séquentiel, si la nieme ligne est exécuté c'est que les autres sont exécuter !
    Peut être veux tu parler du bon déroulement de la commande ren ? Si c'est le cas teste la valeur de %ERRORLEVEL% :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if %ERRORLEVEL% GEQ 1 echo Error
    It isn't that they can't see the solution, it's that they can't see the problem.
    Mes Articles et Traductions (Microstrategy, Css et Javascript)
    Si vous souhaitez contribuer à la rubrique BI, contactez-moi ou tout autre membre de l'équipe BI par MP.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour ton retour ça m'aide à y voir plus clair c'est sympa.
    Oui renommer uniquement si ça existe, j'ai ajouté la commande if pour qu'il ne puisse pas y avoir d'erreur à priori. Il faut pouvoir jongler entre 2 fichiers : Voice.dat et Voice_Anglais.dat (ou Voice_Francais selon le cas).

    Le but de la manœuvre c'est de pouvoir renommer ces 2 fichiers pour passer d'une traduction Francais/Anglais dans les 2 sens.
    Par déduction en voyant le fichier Voice_Francais.dat je sais que le fichier Voice.dat ne peut-etre que l'anglais et inversement si il y a Voice_Anglais.dat je sais que Voice.dat est alors le fichier Francais.

    Pour traduire en Anglais de base il y a le fichier Voice_Anglais.dat donc le Voice.dat est en francais. Pour ce faire Voice.dat doit donc devenir Voice_Francais.dat pour pouvoir laisser la place au Voice_Anglais.dat qui sera renommé en Voice.dat. Même principe pour la traduction Francaise, Voice.dat devient Voice_Anglais.dat et Voice_Francais.dat devient Voice.dat.

    Effectivement pour le ping j'ai du m’emmêler un peu les pinceaux. En effet il faut qu'il y ai le bon déroulement de la commande ren dans le bon ordre. J'ai testé en le supprimant ça fonctionne très bien donc je suppose que chaque ligne est exécuté dans l'ordre du coup. Je ne connaissais pas error level mais ça pourra sans doute me servir.

    Je me suis trompé ici visiblement mais ça fonctionne quand même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if exist Voice.dat if not exist Voice_Anglais ren Voice.dat Voice_Francais.dat
    se serai plutôt pour la traduction en Anglais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if exist Voice_Anglais.dat ren Voice.dat Voice_Francais.dat
    ren Voice_Anglais.dat Voice.dat
    msg * traduction Anglais ok
    et pour l'autre en Francais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if exist Voice_Francais.dat ren Voice.dat Voice_Anglais.dat
    ren Voice_Francais.dat Voice.dat
    msg * traduction Francais ok
    Pour le coup de la commande cd je n'y avait pas pensé, je sais faire ça dans l'invité de commande pour naviguer dans les dossiers avec cd/dir mais alors pour l'appliquer ici je ne vois pas malheureusement. Ca donnerai quelque chose dans ce genre la pour accéder au sous dossier? je n'ai pas réussi à le faire fonctionner, il manque peut-etre une étape?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if exist cd Dossier1/Voice_Anglais.dat ren cd Dossier1/Voice.dat cd Dossier1/Voice_Francais.dat
    ren cd Dossier1/Voice_Anglais.dat cd Dossier1/Voice.dat
    msg * traduction Anglais ok
    Je sens qu'on tient le bon bout! c'est cette histoire de renommer dans des sous-dossiers qui me bloque voila j’espère que mes explications vous paraisse clair sinon n’hésitez pas à demander.

  4. #4
    Membre émérite

    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Juin 2012
    Messages
    877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Points : 2 427
    Points
    2 427
    Par défaut
    Bonjour,

    Je te propose une idée pour faire une seule fonction pour les trois dossiers.

    Tu crée un tableau de 3 cases. Tu mets le nom des trois sous-dossiers et voilà.

    Ensuite dans ton code :
    Je te mets l'algo, je connais mal le bat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Pour i=0 à i=2
         Si existe monBeauTableau[i]\VoiceAnglais.dat ....
              ........
         Sinon
              .....
         FinSi
    FinPour
    Si la réponse vous a été donnée, pensez au Tag .
    Un petit aide à se sentir utile. Merci.

    "La folie. C'est de faire et refaire la même chose en espérant que le résultat sera différent."
    Albert Einstein

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    merci pour ton retour Miistik. Je n'ai pas comprit cette histoire de tableau c'est pour en venir à un script par la suite? ça m’intéresse en tout cas.

    J'ai essayé d'autre manip ça avance un peu mais je bloque toujours sur ces sous-dossiers sinon il n'y a pas de raison que ça ne fonctionne pas mais visiblement la commande ren pose problème lorsqu'il y a des sous dossiers ce qui n'a pas l'air d’être le cas pour la commande del il me semble.
    J'ai retenté un fichier bat maitre pour voir, celui-ci lancerai les 3 bat présent dans les sous dossiers avec la commande call :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    call Dossier1\Anglais.bat
    call Dossier2\Anglais.bat
    call Dossier2\Anglais.bat
    pause
    Contenu Anglais.bat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if exist Voice_Anglais.dat ren Voice.dat Voice_Francais.dat
    ren Voice_Anglais.dat Voice.dat
    msg * traduction Anglais ok
    La commande call fonctionne puisque je vois les infos dans l'invite de commande mais arrivé à la 2éme ligne je me retrouve avec un joli "fichier spécifié introuvable" aucun fichier n'est renommé pas même celui de la 1ere ligne.

    Voir image ci-dessous pour le résultat :

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Finalement j'ai trouvé! j'en ai bavé alors que c’était la base! kalyparker m'a mis sur la voie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    cd Dossier1
    if exist Voice_Anglais.dat ren Voice.dat Voice_Francais.dat
    ren Voice_Anglais.dat Voice.dat
    cd..
    cd Dossier2
    if exist Voice_Anglais.dat ren Voice.dat Voice_Francais.dat
    ren Voice_Anglais.dat Voice.dat
    cd..
    cd Dossier3
    if exist Voice_Anglais.dat ren Voice.dat Voice_Francais.dat
    ren Voice_Anglais.dat Voice.dat
    msg * traduction Anglais ok
    plus de soucis de sous répertoire désormais. Ce n'est pas optimisé mais ça fonctionne donc ça me va. Je me sert de la commande choice pour simplifier. J'aimerai me servir de if %ERRORLEVEL pour faire un retour au menu en cas d'erreur (avec goto menu), par exemple si je lance le choix 2 et que je l'ai déjà fait auparavant qu'il ne m'affiche pas "fichier introuvable" mais plutôt qu'il me fasse un retour menu en m'indiquant avec un message pourquoi : "fichier déjà traduit" des idées?

    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
    27
    28
    29
    30
    @echo off
    cls
    :menu
    echo.
    echo 1. Voix Francais
    echo 2. Voix Anglais
    echo 3. Quitter
    set choice=
    set /p choice=Quel est votre choix ?
    if not '%choice%'=='' set choice=%choice:~0,1%
    if '%choice%'=='1' goto Voix-Fra
    if '%choice%'=='2' goto Voix-Ang
    if '%choice%'=='3' goto exit
    echo Le choix %choice% n'est pas valide.
    echo.
    goto menu
    
    :Voix-Ang
    if exist Voice_Anglais.dat ren Voice.dat Voice_Francais.dat
    ren Voice_Anglais.dat Voice.dat
    cd..
    cd Dossier2
    if exist Voice_Anglais.dat ren Voice.dat Voice_Francais.dat
    ren Voice_Anglais.dat Voice.dat
    cd..
    cd Dossier3
    if exist Voice_Anglais.dat ren Voice.dat Voice_Francais.dat
    ren Voice_Anglais.dat Voice.dat
    msg * traduction Anglais ok
    ...

  7. #7
    Membre émérite

    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Juin 2012
    Messages
    877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Points : 2 427
    Points
    2 427
    Par défaut
    Dans ton script, tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    cd Dossier1
    Du code
    
    cd Dossier2
    Le même code
    
    cd Dossier3
    Exactement le même code.
    Moi je te propose cela :
    Un tableau de 3 cases contenant : Dossier1, Dossier2 et Dossier3.

    Donc tu auras :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Pour tous les éléments du tableau
     Le code que tu as répétés trois fois.
    FinPour
    Si la réponse vous a été donnée, pensez au Tag .
    Un petit aide à se sentir utile. Merci.

    "La folie. C'est de faire et refaire la même chose en espérant que le résultat sera différent."
    Albert Einstein

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Effectivement ce n'est pas tout à fait optimisé, j'ai un peu cherché pour grouper les 3 dossiers ensemble mais pour l'instant ça ne fonctionne pas. Je vais me pencher sur le tableau que tu m'indique.

Discussions similaires

  1. Création d'une DLL pour utilisation dans JNI
    Par Godestiny dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 08/06/2011, 11h36
  2. Batch pour renommer un seul fichier
    Par SybVicious dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 17/02/2009, 12h01
  3. batch pour mettre dans la corbeille
    Par deubelte dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 02/01/2009, 14h34
  4. Réponses: 3
    Dernier message: 03/08/2007, 11h57
  5. Création de fichiers batch pour écrire sur SQLPlus
    Par seb591 dans le forum Sql*Plus
    Réponses: 10
    Dernier message: 22/05/2007, 11h46

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