Déplacer des fichiers automatiquement

Yoda -  
heyquem Messages postés 808 Statut Membre -
Bonjour,

je cherche à faire un petit script qui fait ceci :
1. lis les noms de fichiers contenus dans un dossier
2. déplace ceux contenant la chaine "EXPR" dans un autre dossier

à la base je programme en PHP donc je connais pas vraiment de langages de script pour windows, lequel me conseillez vous ? en gros, quel langage propose des fonctions parse() et move() plutôt simples ?

Merci beaucoup

4 réponses

  1. heyquem Messages postés 808 Statut Membre 131
     
    Bonjour,

    C'est très facile à faire avec Python:

    from os import listdir, sep   
    from os.path import normpath, isfile, join   
    
    source = normpath(raw_input('Entrer le chemin absolu du dossier a examiner : '))   
    dest   = normpath(raw_input('Entrer le chemin absolu du dossier de destination : '))   
    
    for name in listdir(source):   
        if isfile(source + sep + name) and  "EXPR" in name:   
            with open(source + sep + name,'rb') as fsce:   
                with open(dest + sep + name, 'wb') as fdest:                   
                    fdest.write(fsce.read())   
                # remove(source + sep + name)


    Dans ce code:

    normpath() corrige certaines erreurs si on en fait dans l'écriture des chemins. Notamment, si on oublie qu'on est sous Windows et qu'on tape '/' comme séparateur, normpath() rectifie. De même si on tape trop de séparateurs, cette fonction en réduit le nombre à un seul.

    Python détecte quel est le système d'exploitation et sep prend la valeur du séparateur utilisé dans ce système d'exploitation: sep vaut '/' si Linux, '\' si Windows. Ainsi, ce code est il utilisable aussi bien sur une plateforme Linux qu'une Windows.

    Ce code est écrit en Python 2.7. En 3.x ce serait différent au niveau des imports car les modules dans os ont été réorganisés, mais rien de plus comme différence dans la suite.

    remove() est une fonction qui supprime un fichier. C'est pour se conformer à ta demande: "déplacer" des fichiers, et non pas seulement les copier.

    J'ai mis un '#' devant pour faire de la ligne un commentaire: tu as intérêt à tester le code ainsi avant de l'exécuter avec remove() qui supprimera effectivement les fichiers dans le dossier source.

    Ce code peut être facilement complexifié pour prendre en compte des cas supplémentaires: par exemple, si un fichier de même nom existe déjà dans la destination, que faire ?

    PS: il suffit de 10 mn pour installer Python. Si Python ne te convient pas, je n'en ferai pas une maladie.

    J'aimerais savoir si la proposition de chiva est entièrement satisfaisante. Elle est remarquablement courte, même par rapport à Python qui n'est déjà pas très long. Mais elle réclame quand même de "se" positionner dans le fichier de départ, et c'est une limitation, non ?
    2
  2. Yoda
     
    En fait en batch je peux très simplement afficher le contenu du dossier (avec attrib ou dir) et très facilement déplacer un fichier (avec move)
    mais pour poser une condition sur le nom du fichier, c'est coton.
    vous savez comment faire ?
    1
  3. -chiva- Messages postés 17 Statut Membre
     
    bonjour,

    sa peut peut-etre t'aider

    dir /b /s *EXPR*>1.txt

    sa va rechercher tout les fichiers qui contienne EXPR dans leur nom et enregistre le résultat dans un fichier texte nommé 1.txt

    utilise la commande CD pour te positionné sur un dossier de départ
    1
  4. Yoda
     
    oui merci beaucoup j'avais fini par en arriver là
    la commande suivante permet de faire ce que je voulais
    FOR /f "tokens=*" %%G in (1.txt) do move "%%G" C:\dossier_de_destination
    1