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 :

[Batch] Copie de fichiers en fonction d'une partie du nom de fichier


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 16
    Par défaut [Batch] Copie de fichiers en fonction d'une partie du nom de fichier
    Bonjour,

    Je suis débutant dans les scripts batch et votre aide me serait très utile.
    J'ai actuellement dans l'entreprise où je travaille une tâche répétitive à effectuer tout les matins.

    Je m'explique :

    Je reçois une archive compressée contenant plusieurs fichiers .pdf que j'extrais dans un dossier.
    Ces fichiers extraits ont tous un nom identique : Toto100.pdf, Toto200.pdf, etc...

    Ce que je souhaite c'est créer un script batch me permettant de copier les fichiers dans 2 dossiers différents, ceci en fonction de leur nom.
    Les fichiers comportant un nom entre 100 et 200 devraient être copiés dans le sous-dossier Toto1 et le reste dans le dossier Toto2.

    J'ai actuellement déjà fait quelques recherches et ai trouvé un script me permettant de supprimer les espaces dans les noms de fichiers. J'ai également pu me renseigner sur la fonction "Xcopy" qui me permettrait de copier les fichiers. Cependant je ne trouve rien sur comment définir les plages de nombres sur lesquelles il devra copier dans tel ou tel dossier, et comment appliquer ces plages de nombres à la fonction xcopy sur une partie du nom du fichier.


    J'espère avoir été explicite et reste à disposition pour toutes questions.



    EDIT
    Résultat :

    Code Final pour remplir le fichier contenant la liste à comparer :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For /L %%N IN (1000,1,2999) Do echo %%N >> listeET.txt
    For /L %%N IN (7700,1,8500) Do echo %%N >> listeET.txt
    Code Final pour copier les fichiers en fonction d'une partie de leur nom :

    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
    setlocal enabledelayedexpansion
    @echo off
    for /r "c:\toto" %%i in (*.pdf) do (
    set chemin_complet=%%~fi
    set nom_extention=%%~nxi
    for /f "tokens=1,2,3,4 delims=_" %%i in ("!nom_extention!") do (
    set p1=%%i
    set p2=%%j
    set p3=%%k
    set p4=%%l
    set p5=!p1:~3!
    set etat=0
    for /f "tokens=*" %%i in ('type "C:\toto\listeET.txt" ^| find "!p5!"') do set etat=1
    if  !p5! LSS 1000 set etat=0
    if "!etat!"=="1" move "!chemin_complet!" "c:\toto\ETE"
    if "!etat!"=="0" move "!chemin_complet!" "c:\toto\ETF"
    set etat=0
    )
    )

  2. #2
    Membre éprouvé

    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2011
    Messages : 104
    Par défaut
    la méthode me parait simple:

    1: exécuter un déplacement des fichiers pdf avec le filtre "Toto1*.pdf Toto200.pdf" vers dossier 1

    2: exécuter un déplacement de tout le reste vers dossier 2

    une idée pour le code:

    for /r "source" %%i in (*Toto1*.pdf *Toto200.pdf) do (xcopy "%%~fi" "dossier 1")

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 16
    Par défaut
    Bonjour et merci de la réponse rapide.


    J'ai pris un mauvais exemple.
    Les plages que je souhaiterais sont :

    1000 --> 2999
    7700 --> 8500

    Le soucis est que si je met comme départ toto1* il comptera toto100 et le copiera alors qu'il ne le doit pas. Idem pour toto7*.

    Y'a-t il une solution ? je ne vois pas vraiment comment faire

  4. #4
    Membre éprouvé

    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2011
    Messages : 104
    Par défaut
    Bon... il faut faire un code un peu plus compliqué alors^^

    Option 1: si tous tes fichiers on un nom formaté de manière identique, faire une boucle qui récupère la partie numérique puis exécute des conditions qui détermine si on copie ou non.

    Option 2: faire un fichier contenant tout les nom de fichier a copier puis faire un boucle qui copie si la chaine et trouvé dans le fichier.

    Option 3: xcopy propose d'ajouter en paramètre un fichier contenant les noms de fichiers a exclure. (le plus simple à faire)

    tu peux lister quelques noms de tes fichiers ?

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 16
    Par défaut
    ET1668_15112011_FIT11710601_C.pdf
    ET8955_16082011_FIT11511432_C.pdf
    ET575_23072011_FIT11415986_C.pdf

    La partie numérique intéressante se trouve après ET et avant le premier _

    Tes solutions me paraissent intéressantes en effet.

    La 2ème me parait plus simple à faire avec mes compétences. Je vais essayer mais je doute vraiment réussir à interroger le fichier texte avec des conditions. Puis les dates dans les noms de fichiers est aléatoire.

    La 3ème solution est simple en effet mais trop laborieuse je pense car je devrais créer une liste des 3000 que je ne veux pas copier et la date à la fin des fichiers est elle aléatoire.

  6. #6
    Membre éprouvé

    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2011
    Messages : 104
    Par défaut
    code pour option 2:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    setlocal enabledelayedexpansion
    
    for /r "source" %%i in (*) do (
    set chemin_complet=%%~fi
    set nom_extention=%%~nxi
    
         set etat=0
         for /f "tokens=*" %%i in ('type "chemin du fichier" ^| find "!nom_extention!"') do set etat=1
    
              if "!etat!"=="1" xcopy "!chemin_complet!" "destination"
    
    )
    j'ai pas testé je te laisse ce plaisir^^

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

Discussions similaires

  1. [XL-2007] Ouverture d'un fichier en fonction d'une partie de son nom
    Par Yamiral dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/11/2012, 17h02
  2. [XL-2002] Sélectionner fichier en fonction d'une partie de son nom
    Par johan89 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 02/11/2011, 20h48
  3. Renommage d'une partie de nom de fichiers en masse et aussi à l'intérieur
    Par sclinard dans le forum Shell et commandes POSIX
    Réponses: 2
    Dernier message: 17/09/2010, 15h02
  4. Recherche fichier dont on connait une partie du nom
    Par kluh dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/11/2008, 08h31
  5. suppression fichier en fonction d'une date
    Par kalyparker dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 02/07/2007, 14h19

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