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 -
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
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:
- Script pour deplacer les fichiers
- Déplacer colonne excel - Guide
- Script vidéo youtube - Guide
- Renommer des fichiers en masse - Guide
- Fichiers epub - Guide
- Déplacer barre des taches windows 11 - Guide
5 réponses
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:
http://pastebin.com/C4kKdRde
La même exécution, avec
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:
Après traitement:
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:
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
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
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")
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")
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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 ;)
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 ;)
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)
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)
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.
'.....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 :
donne
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
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.