Script pour deplacer les fichiers

reseau0010 Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   -  
reseau0010 Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
si quelqu'un peut m ecrire un script qui sert à déplaser les fichiers vers des dossiers qui ont du meme noms.

par exemple on a un dossier racine "documents"

au sein de ce dossier on ces dossiers
"agent1";"agents2"

et on a ces fichiers
agent1.doc;agent2.doc;agent1.pdf;agent2.pdf;

je veux que les fichiers "agent1.doc" et "agent1.pdf" se deplacent vers le dossier agent
1

meme chose pour agent2
A voir également:

5 réponses

heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   131
 
Salut,

Je te propose une fonction dans un code écrit en Python qui fait le traitement que tu souhaites.
On passe un chemin de répertoire à la fonction et elle traite tous les fichiers contenus dans ce répertoire et de manière récursive dans tous ses sous-répertoires.

Voici la marche à suivre:


1.a
Créer un fichier .txt , a priori n'importe où sur ton ordinateur

1.b
Copier le code à cette adresse:
https://pastebin.com/AfA4WK2z
et le coller dans deplacer fichier.py
Refermer ce fichier

1.c
Renommer ce fichier avec l'extension .py
Par exemple deplacer fichier.py




2.
Installe Python sur ton ordinateur. Cela prend 5 minutes
https://www.python.org/downloads/

Nota - J'ai écrit le code avec Python 2.7




3.a
Cliquer droit sur le fichier deplacer fichiers.py puis sur Edit with IDLE

3.b
Modifier la chaîne 'J:\Copie de ESSAI' présente comme argument de la fonction par un chemin de dossier de ton ordinateur sur lequel tu testeras le code.

Nota - Personnellement, j'ai créé un dossier ESSAI avec plein de fichiers et sous-dossiers, puis pour faire chaque test d'exécution, je faisais une copie de ce dossier.
Ainsi, le code tourne sur la copie, que l'on peut éliminer après exécution, le dossier ESSAI restant intact et disponible pour être recopié.

Nota - Que tu sois sur Windows ou Linux, tu peux utiliser / comme séparateur dans les chemins. Windows affiche ses chemins avec \ , mais Python se débrouille.
Ca évite de doubler les antislashes, qui sont le caractère d'échappement, ce qui peut donner des problèmes devant certains autres caractères (par exemple \t est un tab)

3.c
Pour exécuter, cliquer sur Run dans la barre de menu ,
ou appuyer sur F5

3.d
Possible d'exécuter aussi dans une fenêtre de lignes de commandes en cliquant directement sur le fichier.

Nota - Lors de l'installation de Python, l'installateur recherche tous les fichiers présents sur l'ordinateur ayant l'extension .py et enregistre le chemin du dossier conteneur de chacun. Il ne devrait donc pas y avoir de difficulté pour exécuter le code deplacer fichiers.py . Mais c'est pourquoi il faut créer le fichier avant de faire l'installation si tu le crées dans un dossier exotique (par exemple sur mon ordinateur, les codes Python sont sur le disque virtuel I:\ )







J'ai fait tourner le code https://pastebin.com/AfA4WK2z sur un dossier J:\Copie de ESSAI
Dans ce code, la fonction est:
move_file_in_same_name_directory('J:\Copie de ESSAI',1)
Le 1 fait afficher toutes les opérations effectuées, le résultat est ici:
http://pastebin.com/C4kKdRde


La même exécution, avec
move_file_in_same_name_directory('J:\Copie de ESSAI',0,1,1)
n'affiche pas les opérations, mais seulement un état des dossiers et fichiers avant l'exécution et l'état après l'exécution.
Le résultat est là:
http://pastebin.com/bPh3j4JF






Remarque 1
- l'exploration des sous-dossiers du répertoire passé en argument étant effectuée par récursion,
des fichiers 'agent1.rtf' , 'agent1.txt' ... d'un dossier A contenant un sous-dossier 'A/agent1' sont d'abord déplacés vers 'A/agent1' ,
puis quand ce sous-dossier est exploré,
les fichiers 'agent1.rtf' , 'agent1.txt' ... sont à nouveau déplacés vers un sous-sous-dossier 'A/agent1/agent1' si 'A/agent1' contient lui même un dossier 'agent1'


Ca se voit dans le résultat présent dans http://pastebin.com/bPh3j4JF :



Avant traitement:

dir_path == J:\Copie de ESSAI   
dirnames == ['agent1', 'agent2', 'NNN']   
filenames == ['agent1.pdf', 'agent1.rtf', 'agent1.txt', 'agent1m.txt', 'agent2.pdf', 'agent2.rtf', 'agent2.txt', 'agent2.xsl', 'agent22.txt', 'agg', 'rettzhdx.hyu']   

dir_path == J:\Copie de ESSAI\agent1   
dirnames == ['agent1']   
filenames == ['ununu.rtf']   

dir_path == J:\Copie de ESSAI\agent1\agent1   
dirnames == []   
filenames == ['alone_file.txt']   

dir_path == J:\Copie de ESSAI\agent2   
dirnames == ['DOSS-DOSS']   
filenames == ['agent2.rtf', 'agent22.txt', 'zum.py']   


Après traitement:

dir_path == J:\Copie de ESSAI   
dirnames == ['agent1', 'agent2', 'NNN']   
filenames == ['agent1m.txt', 'agent2.rtf', 'agent22.txt', 'agg', 'rettzhdx.hyu']   

dir_path == J:\Copie de ESSAI\agent1   
dirnames == ['agent1']   
filenames == ['ununu.rtf']   

dir_path == J:\Copie de ESSAI\agent1\agent1   
dirnames == []   
filenames == ['agent1.pdf', 'agent1.rtf', 'agent1.txt', 'alone_file.txt']   

dir_path == J:\Copie de ESSAI\agent2   
dirnames == ['DOSS-DOSS']   
filenames == ['agent2.pdf', 'agent2.rtf', 'agent2.txt', 'agent2.xsl', 'agent22.txt', 'zum.py']   








Remarque 2
- la fonction move_file_in_same_name_directory() peut être utilisée plusieurs fois sur des dossiers différents avec des arguments différents, comme ceci:

for x in (('J:/Copie de ESSAI',1),  
          ('J:/Copie (2) de ESSAI',1,0,1),  
          ('F:/aza')):  
    move_file_in_same_name_directory(*x)  
    raw_input('\npause\n')  

raw_input("\n\n-*- Fin de l'exécution\n    Appuyer sur Entrée pour terminer ")  






Remarque 3
- la fonction os.walk() de Python produit récursivement des tuples (dirpath,dirnames,filenames)
Chaque liste dirnames peut être modifiée en place et walk() continuera la récursion sur les sous-dossiers restant dans dirnames
1
reseau0010 Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour j ai essayé avec la méthode sitée par vous , c est super,
mais j ai reussi seule à la premiére fois.
maintenant j ai le dossier à ce chemein
C:\Users\adimin\Desktop\Nouveau dossier (2)
et le fichier py au bureau
j ai changé le parametre à :
move_file_in_same_name_directory('C:\Users\adimin\Desktop\Nouveau dossier (2)',1)

ça marche pas.
0
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   131
 
Il faut te relire:

'.....adimin....' ? Vraiment ?



Il faut aussi lire les réponses:

« Nota - Que tu sois sur Windows ou Linux, tu peux utiliser / comme séparateur dans les chemins. Windows affiche ses chemins avec \ , mais Python se débrouille.
Ca évite de doubler les antislashes, qui sont le caractère d'échappement, ce qui peut donner des problèmes devant certains autres caractères (par exemple \t est un tab) »

Dans les chaînes de caractères, le caractère \ échappe certains caractères en étant placé devant, à savoir les caractères suivants: a b f n r t v x , et aussi bien sûr lui même.
C'est pourquoi le code suivant :

print '"""\a***\b@@@\f&&&'
print '------------'
print '%%%\n^^^\r;;;\\'
print '------------'
print '***\t@@@\v&&&'
print '------------'

print '\x21 \x22 \x23 \x24 \x25 \x26 \x27 \x28 \x29 \x2a \x2b'
print '\x2c \x2d \x2e \x2f \x30 \x31 \x32 \x33 \x34 \x35 \x36'
print '\x37 \x38 \x39 \x3a \x3b \x3c \x3d \x3e \x3f \x40 \x42'
print '\x43 \x44   \x59 \x5a \x5b \x5c \x5d \x5e \x60 \x61'


donne

"""***@@@&&&
------------
%%%
^^^;;;\
------------
***	@@@&&&
------------
! " # $ % & ' ( ) * +
, - . / 0 1 2 3 4 5 6
7 8 9 : ; < = > ? @ B
C D   Y Z [ \ ] ^ ' a


Les carrés sont le moyen par lequel l'affichage signale qu'il ne peut pas afficher le caractère échappé parce qu'il a une signification non affichable.
Par contre \t est un tab , \n est un retour à la ligne , et les \xij avec ij = nombre hexadécimal sont le codage des caractères ASCII sous forme de chaîne ( cf http://www.asciitable.com/ )

Or dans ton chemin, il y a \a
Il faut
soit écrire 'C:\\Users\\admin\\Desktop\\Nouveau dossier (2)'
soit 'C:/Users/admin/Desktop/Nouveau dossier (2)'

A mon avis, c'est ce qui pose problème.




Encore une chose: est-ce que tu te rends compte de la quantité d'information contenue dans une phrase telle que : «ça marche pas»
C'est proche de zéro
Pourtant Python a l'avantage de délivrer des messages d'erreur qui permettent de savoir rapidement ce qui ne va pas.
Décris donc quel est le problème que tu constates au lieu d'être aussi laconique
0
reseau0010 Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   1
 
bonjour,
en fait c'est admin et non adimin :d

pour la solution c est super ,les fichiers sont déplacé vers les dossiers qui ont de même nom

merci beaucoup pour votre aide.
0
curumo_leblanc Messages postés 266 Date d'inscription   Statut Membre Dernière intervention   74
 
OU par fichier bat :

mode con codepage select=1252
set repertoire=C:\Documents and Settings\... Le chemin de ton repertoire
if exist "%USERPROFILE%\bureau\list_fic_tmp.txt" del "%USERPROFILE%\bureau\list_fic_tmp.txt"
for /F "delims=" %%i in ('dir "%repertoire%" /a-d /b') do (mkdir "%repertoire%\%%~ni")
for /F "delims=" %%i in ('dir "%repertoire%" /a-d /b') do (move /y "%repertoire%\%%i" "%repertoire%\%%~ni")
1
Curumo
 
Bonjour,

En quel langage ? sur quelle plateforme ?
0
reseau0010 Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   1
 
bonjour,
c est pas un probleme
ça peut etre en batch ou autre langage
merci d avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
Bonjour

Essaye cette syntaxe

En batch

Move "chemin1.XXX" "chemin2"



Exemple : je veux déplacer le fichier tom.txt qui se trouve sur le disque dur sur le bureau

Je crée donc un fichier bat sur le bureau
=> tout d'abord je crée un fichier text (clic droit > nouveau >Document text

=> une fois crée, change le nom si tu veux, et aussi l'extention txt en bat : pour cela, il faut que tu vois les extensions.
Si ce n'est pas le cas, ouvre un dossier, n'importe lequel
Vas dans outil > option des dossiers > affichage et décoche la case "masquer les extensions des fichiers dont le type est connu :D

Ensuite, clic droit sur le bat, et clique sur modifier

ensuite, met ton code


du style

Move "c:\tom.txt" "c:\users\XXX\desktop"



@plusche
0
reseau0010 Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour
Je sais travailler avec la cmd move.
Je pense que tu n as pas bien lire mon probleme
0
Utilisateur anonyme
 
Salut :)


J'ai lu, et j'ai compris ton problème ==> C'est toi qui n'essaye pas de chercher plus loin :(

Rien ne t'empêche de faire une bouche FOR, c'est à dire de "dire" d'envoyer 2 fichiers vers un dossier



Voici un procédé (il marche pour moi)

@echo off
For %%a in (
"chemin\agent1.doc"
"chemin\agent1.pdf") do move %%a "dossier agent1"


et pareil pour agent2.doc et agent2.pdf dans le dossier agent 2


Exemple
J'ai crée les fichiers agent1.doc / agent1.pdf / agent2.doc / agent2.pdf ==> sur le bureau
J'ai crée les dossier agent1 et agent2


J'ai utilisé ce code

@echo off
For %%a in (
"c:\users\thomas\desktop\agent1.doc"
"c:\users\thomas\desktop\agent1.pdf") do move %%a "c:\users\thomas\desktop\agent1"

For %%b in (
"c:\users\thomas\desktop\agent2.doc"
"c:\users\thomas\desktop\agent2.pdf") do move %%b "c:\users\thomas\desktop\agent2"
pause





Résultat 1 => agent1.doc et agent1.pdf sont déplacés dans le dossier agent1
Résultat 2 =>agent2.doc et agent2.pdf sont déplacés dans le dossier agent2



A toi de modifier le code avec tes propres chemins

@plusche ;)
0
curumo_leblanc Messages postés 266 Date d'inscription   Statut Membre Dernière intervention   74
 
il veut pas des explications ou chercher, il veut le script. Perso, je m'y pencherais demain ou ce soir, je verrais.
0
reseau0010 Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   1
 
bonjour , et merci pour l aide
sur ton code il faut préciser les fichiers et les chemins;
mais si j ai 100 fichiers ,je vais les déplacer manuellement.

je veux un script qui fait la comparaison entre les nom des dossiers et ceux des fichiers sans extention si ils sont identiques , ils seront deplacer automatiquement
(ex agent1.doc et agent1.pdf vers le dossiers agent1
ex agent2.doc et agent2.pdf vers le dossiers agent2)
0