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 :

Déplacer un fichier en fonction d'une chaîne de caractères [Batch]


Sujet :

Scripts/Batch

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Déplacer un fichier en fonction d'une chaîne de caractères
    Bonjour,

    Mon but est de déplacer les fichiers d'un dossier A vers des dossiers B,C,D en fonction de certains caractères dans le nom de ces fichiers tout en créant un sous dossier.
    Voici la démarche de mon script :
    1) Lire le nom de tous les fichiers contenus dans un dossier (entree)
    2) Récupérer ma variable obtenu avec 'for' en 1) : limiter le nombre de caractères à ceux qui m'intéressent (les 9 premiers) et en faire une variable.
    3) Créer des conditions 'if' pour la création d'un dossier et surtout le déplacement des fichiers précédemment enregistrés dans ma variable en fonction des 9 premiers caractères de chacun des fichiers.

    Mon problème :
    Je n'arrive pas à conditionner le déplacement des fichiers en fonction des 9 premiers caractères soit le 3). J'arrive à vérifier l'existence de la chaîne de caractères ce qui me permet d'aller vers mes instructions mais ensuite, impossible de distinguer les fichiers les uns des autres en fonction de ces 9 premiers caractères pour déplacer les bons fichiers dans les bons dossiers.

    Voici le script que j'ai écris :

    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
    @echo off
    REM lecture des fichiers presents dans le repertoire entree et recuperation de la variable %%I
    for /f %%I in ('dir /b C:\Docume~1\%USERNAME%\Bureau\entree\') do (call :nomFichier %%I )
    goto :fin
    REM sauvegarde de la variable et limitation nombre caracteres pour utiliser la base caracteres
    :nomFichier
    set nomFichier=%1
    set variable=%nomFichier:~0,9%
    REM goto conditions pour le tri des fichiers
    goto :conditionsRoutages
    REM routage fichier selon base caracteres recuperee
    :conditionsRoutages
    if %variable% EQU 978225309 goto :Routage1
    else if %variable% EQU 978270963 goto :Routage2
    REM else goto :fin
    :Routage1
    mkdir "C:\Docume~1\%USERNAME%\Bureau\Archives\Routage1\%date:~0,2%-%date:~3,2%-%date:~6,4%_Routage1"
    move "C:\Docume~1\%USERNAME%\Bureau\entree\??????)" "C:\Docume~1\%USERNAME%\Bureau\Archives\Routage1\%date:~0,2%-%date:~3,2%-%date:~6,4%_Routage1\"
    goto :fin
    :Routage2
    mkdir "C:\Docume~1\%USERNAME%\Bureau\Archives\Routage2\%date:~0,2%-%date:~3,2%-%date:~6,4%_Routage2"
    move "C:\Docume~1\%USERNAME%\Bureau\entree\??????)" "C:\Docume~1\%USERNAME%\Bureau\Archives\Routage2\%date:~0,2%-%date:~3,2%-%date:~6,4%_Routage2\"
    goto :fin
    :fin
    pause
    En l'état (sans les ?????) il me créé un seul sous dossier dans un seul des dossiers possibles et copie tous les fichiers sans exception dans ce seul sous-dossier.

    J'ai aussi tenté une autre approche, peu fructueuse :
    L'utilisation répétée de 'for' avec les caractères souhaités suivis de * mais ça ne fonctionne pas, sûrement une erreur de syntaxe. Est-ce, selon vous une meilleure approche ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @echo off
    for /f %%I in ('dir 978225309* /b C:\Docume~1\%USERNAME%\Bureau\entree\') do (mkdir 
    'C:\Docume~1\%USERNAME%\Bureau\Archives\Routage1\%date:~0,2%-%date:~3,2%-%date:~6,4%_Routage1' %%I)
    copy %%I "C:\Docume~1\%USERNAME%\Bureau\Archives\Routage1\%date:~0,2%-%date:~3,2%-%date:~6,4%_Routage1"
    pause
    La question qui résume mon problème :
    Comment puis-je mettre ce filtre de condition pour "router" un fichier avec 9 caractères donnés, répondant à la condition, dans le bon dossier ?


    Je m'en remet à votre savoir, Ô grands érudits du batch que vous êtes.

    Merci de m'éclairer.

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Comme les grands érudits n'ont pas voulu m'aider

    J'ai trouvé la solution seul (sûrement parce que la problématique n'était pas assez complexe pour que les dits érudits n’interviennent).
    J'arrive à spécifier le chemin des fichiers qui vérifient ma condition de correspondance de caractères en récupérant la variable résultat de mon if. Donc je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if %variable% EQU chaînedecaractères set uneautrevariable=%1
    Ensuite, je n'ai plus qu'à indiquer le chemin en terminant par %uneautrevariable% lorsque je donne l'instruction de déplacement de mes fichiers.

    En espérant que cela aide quelqu'un d'autre lorsque qu'il tombera ici en quête de solution en gré de ses recherches.

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

Discussions similaires

  1. Fonction renvoyant une chaîne de caractères
    Par romain_t dans le forum C
    Réponses: 3
    Dernier message: 17/02/2011, 18h23
  2. [XL-2000] Fonction séparant une chaîne de caractères
    Par MaTtaW dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/12/2010, 14h27
  3. Fonction retournant une chaîne de caractères
    Par lamyruth dans le forum C
    Réponses: 2
    Dernier message: 04/01/2010, 10h58
  4. Réponses: 3
    Dernier message: 09/02/2009, 17h46
  5. Réponses: 8
    Dernier message: 16/06/2006, 01h06

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