Script pour copier "vers un dossier" en filtrant les infos

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • lauriniere
    Visitor
    • Dec 2012
    • 5

    Script pour copier "vers un dossier" en filtrant les infos

    Bonjour,
    J'utilise régulierement l'interface BC mais là , vu l'ampleur de la tache je dois passer par un script (que je ne maitrise pas).
    Je souhaite "ranger" certain dossier
    Actuellement j'ai un dossier "c:\toto" qui contient tous les documents , je voudrais pouvoir creer une nouvelle arborescence sous "d:\toto" afin de ranger tous les fichiers "*.xls*" dans "d:\toto\excel" , tous les "*.doc" dans "d:\toto\word" etc etc ...

    Je dois pouvoir lancer le script pour toutes les personnes de l'association (environ 80 personnes ) soit en lançant le script avec un parametre qui est le nom de la personne soit le script est capable de lire une liste de nom stockée dans un fichier notepad .

    Merci par avance de vos réponses .

    En attendant je continu de chercher et de comprendre les commandes utilisées dans les scripts , domage qu'il n'y ai pas comme dans excel la possibilite de faire"enregistrer une macro" afin d'avoir une ebauche de script .

    Bonne journée.
  • mdes
    Moderator
    • Apr 2008
    • 251

    #2
    Premiers éléments de réponse

    Bonjour,
    • Y a-t-il une arborescence de dossier à traiter sous Toto\ ?
    • Comment distinguer qu'un fichier concerne un certain adhérent ?
      Son nom est-il dans
      • le nom du fichier ?
      • Le fichier est-il dans un sous-répertoire à son nom sous Toto\ ?


    Pour ce qui est du traitement, il faut un fichier de commande DOS (.BAT ou .CMD) qui utilisera la commande FOR /F. En tapant FOR /? dans une fenêtre DOS, l'aide suivante est affichée :
    Code:
    FOR /F ["options"] %variable IN (ensemble-fichiers) DO commande [paramètres]
    FOR /F ["options"] %variable IN ('chaîne') DO commande [paramètres]
    FOR /F ["options"] %variable IN ((`commande`) DO commande [paramètres]
    
        ensemble-fichiers est un ou plusieurs noms de fichiers. Chaque fichier est
        ouvert, lu et traité avant de passer au fichier suivant de
        ensemble-fichiers. Le traitement consiste à lire dans le fichier, le
        découper en lignes individuelles de texte puis analyser chaque ligne en
        zéro ou plusieurs jetons. Le corps de la boucle FOR est ensuite appelé
        avec la ou les valeurs de variables prenant la valeur de la ou des chaînes
        de jeton trouvées. Par défaut, /F transmet le premier jeton séparé par un
        blanc dans chaque ligne de chaque fichier. Les lignes vides sont ignorées.
        Vous pouvez outrepasser le comportement d'analyse par défaut en spécifiant
        le paramètre optionnel "options".  Ceci est une chaîne entre guillemets
        contenant un ou plusieurs mots-clés spécifiant diverses options d'analyse.
    Ensuite, dans le fichier de commande, il faudra appeler BC avec le nom de l'adhérent récupéré dans la variable du FOR.

    Je suis prêt à t'aider, mais répond aux questions ci-dessus pour que je puisse connaitre la structure de tes données (fichiers).

    @ Bientôt,
    Michel.
    Michel Dessaintes
    Modérateur du Forum Francophone & Traducteur Officiel de BC2/BC3/BC4 en Français

    Comment

    • lauriniere
      Visitor
      • Dec 2012
      • 5

      #3
      Bonjour,
      cote gauche j'ai :
      toto (contenant tous les fichiers )
      titi (contenant tous les fichiers )
      tata (contenant tous les fichiers )
      toto,titi et tata etant les noms des personnes (désolé pour l'imagination ;-) )

      cote droit j'aimerai
      toto/xls (avec uniquement les fichiers xls )
      toto/doc (avec uniquement les fichiers doc )
      titi/xls(avec uniquement les fichiers xls )
      titi/doc etc etc

      j'ai un début de script
      log normal "C:\Documents\Log.txt"
      load "C:\TOTO"
      select left.all
      filter "*.xls*"
      # Copie les fichiers de la gauche vers la droite dans un répertoire spécifique
      copyto path:base "D:\TOTO\xls"

      filter "*.*"
      select left.all
      filter "*DOC*.*"

      # Copie les fichiers de la gauche vers la droite dans un répertoire spécifique
      copyto path:base "D:\toto\doc"

      Maintenant j'aimerai remplacé toto par une variable et lancé la commande bcompare.exe avec cette variable

      le must serait d'avoir un fichier.txt contenant le nom de mes membres interpretable dans la commance bcompare.exe ....

      Je vais regarder la boucle que tu proposes ...

      Comment

      • mdes
        Moderator
        • Apr 2008
        • 251

        #4
        On y arive...

        Et bien voilà : c'est tout bon
        J'ajoute juste qu'il faut passer le nom d'adhérent en paramètre : (cf. l'aide Sommaire > Utiliser Beyond Compare > Automatisation avec des scripts)
        En plus des commandes standard, les paramètres de la ligne de commande et les variables d'environnement peuvent être insérées dans le script au moment où il s'exécute. Les variables de la ligne de commande sont spécifiées par le signe pour cent (%) suivi d'un nombre simple de 1 à 9. Le nom du script et les commutateurs de la ligne de commande commençant par / ne sont pas inclus dans la liste 1-9. La commande de script :

        load "%1"

        chargera n'importe quelle session fournie sur la ligne de commande, telle que dans "BCompare.exe @script.txt MaSession".

        Les variables d'environnement sont insérées en enfermant leur nom entre des signes pour cent, et sont sensibles à la casse. Ce qui suit exécute la même chose que le script précédent, excepté qu'il prend le répertoire à partir de l'environnement :

        load "%TMP%"
        select all
        delete all

        Il y a également plusieurs variables dynamiques que Beyond Compare peut remplir à chaque ligne de script. La variable %date% correspond à la date courante au format aaaa-mm-jj. Le format de la variable %time% dépend des paramètres régionaux de votre ordinateur. La variable %fn_time% fournit le temps en hh-mm-ss, ce qui peut être utile pour les noms de fichier.
        Pour ce qui est du fichier des adhérent, voici le type de script BC1Adh.CMD
        Code:
        FOR /F %%I IN(c:\ListeAdherentx.txt) do xxx\BComp.exe @Script.txt %%I
        avec le fichier texte c:\ListeAdherentx.txt qui contient un nom d'adhérent par ligne.
        Michel Dessaintes
        Modérateur du Forum Francophone & Traducteur Officiel de BC2/BC3/BC4 en Français

        Comment

        • lauriniere
          Visitor
          • Dec 2012
          • 5

          #5
          Merci beaucoup de votre aide , je vais tester votre solution , en espérant ne pas m'emmêler les pinceaux ....

          Bonne journée

          Comment

          • lauriniere
            Visitor
            • Dec 2012
            • 5

            #6
            Bonjour , dans le script je ne sais pas comment remplacer le nom de mon adherent .

            load "C:\TOTO"
            j'ai testé
            load "C:\%1"
            load "C:\%1%"
            load "C:\"%1""
            load "C:\"I""

            Mais rien ne fonctionne , n'ayant pas de notion de programmation je ne comprend pas le probleme . Pouvez vous m'aider de nouveau ? Merci de votre réponse

            Comment

            • mdes
              Moderator
              • Apr 2008
              • 251

              #7
              Voici la solution : (les "xxx" doivent être remplacés par les répertoires correspondants)

              ListeAdherents.txt (Fichier des adhérents, 1 nom / ligne) :
              Code:
              a111
              b222
              c333
              Script.txt (Fichier de script BC3) : tu dois le modifier avec tes commandes de script BC3
              Code:
              log verbose append:"xxx\Adherents.log"
              load "xxx\%1" "xxx\"
              Script.cmd (Fichier batch DOS) :
              Code:
              for /f %%I in (xxx\ListeAdherents.txt) do "xxx\BComp.com" @xxx\Script.txt %%I
              Tu double-cliques sur Script.cmd, et tout s'exécute.
              Voici le log que j'obtiens avec mes exemples :
              Code:
              07/12/2012 15:10:21  >> log verbose append:"C:\Temp\bc3\log.log"
              07/12/2012 15:10:21  >> load "C:\Temp\bc3\a111" "c:\temp\bc3"
              07/12/2012 15:10:21  Charger la comparaison : C:\Temp\bc3\a111 <-> C:\Temp\bc3
              07/12/2012 15:10:21  >> 
              07/12/2012 15:10:21  Script terminé en 0,03 secondes
              07/12/2012 15:10:22  >> log verbose append:"C:\Temp\bc3\log.log"
              07/12/2012 15:10:22  >> load "C:\Temp\bc3\b222" "c:\temp\bc3"
              07/12/2012 15:10:22  Charger la comparaison : C:\Temp\bc3\b222 <-> C:\Temp\bc3
              07/12/2012 15:10:22  >> 
              07/12/2012 15:10:22  Script terminé en 0,02 secondes
              07/12/2012 15:10:22  >> log verbose append:"C:\Temp\bc3\log.log"
              07/12/2012 15:10:22  >> load "C:\Temp\bc3\c333" "c:\temp\bc3"
              07/12/2012 15:10:22  Charger la comparaison : C:\Temp\bc3\c333 <-> C:\Temp\bc3
              07/12/2012 15:10:22  >> 
              07/12/2012 15:10:22  Script terminé en 0,03 secondes
              Ne mets pas de caractères accentués dans les noms de fichiers (ça pose trop de problèmes sous DOS).
              !!! Prend une sauvegarde de TOUS tes fichiers avant de faire des essais !!!
              Essaie d'abord avec 2 adhérents.
              Vérifie le fichier journal (Adherents.log)

              On dit "Merci qui ?"
              Michel Dessaintes
              Modérateur du Forum Francophone & Traducteur Officiel de BC2/BC3/BC4 en Français

              Comment

              • lauriniere
                Visitor
                • Dec 2012
                • 5

                #8
                Merci Michel bien évidemment . Je teste tout ça dés que possible . faut aussi que je comprenne pour la suite c'est important .

                Bonne soirée et encore merci
                vraiment tres sympa votre aide .

                Comment

                • mdes
                  Moderator
                  • Apr 2008
                  • 251

                  #9
                  Bonne soirée, et si tu rencontres des problèmes, n'hésite surtout pas à revenir sur ce forum.

                  Tu verras, Beyond Compare est vraiment génial
                  Michel Dessaintes
                  Modérateur du Forum Francophone & Traducteur Officiel de BC2/BC3/BC4 en Français

                  Comment

                  Working...