Déplacer des fichiers automatiquement

Yoda -  
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

4 réponses

heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   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
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
-chiva- Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
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
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