Dispatch de fichiers dans les dossiers correspondants
Résolu/Fermébarnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 - 14 sept. 2022 à 16:32
- Dispatch de fichiers dans les dossiers correspondants
- Afficher les dossiers cachés - Guide
- Afficher la taille des dossiers - Guide
- Renommer tous les fichiers d'un dossier - Guide
- Créer plusieurs dossiers en même temps - Forum Windows
- Créer des dossiers à partir d'une liste excel ✓ - Forum Excel
15 réponses
18 août 2022 à 17:21
Bonjour,
Il y a combien de personnes différentes ?
Est-ce qu'il faut créer les dossiers avec les noms des personnes ou bien ils sont déjà créés ?
Bonjour,
Il y a environ 800 dossiers au nom des personnes qui sont déjà créés.
Et peut-être une dizaine de fichiers (répartis dans des dossiers et sous dossiers) par personne à reclasser.
C'est tellement énorme, si vous pouviez m'aider ça m'éviterai des semaines de travail !
19 août 2022 à 10:07
Je m'en occupe. Vous travaillez sur quel Windows (7, 8, 10) ?
Je vous recontacte en début d'après-midi.
Modifié le 19 août 2022 à 14:27
Voilà j'ai terminé le script, je ne le poste pas directement car il est un peu trop long.
Voilà le lien pour le télécharger : https://www.cjoint.com/c/LHtlYNvcAdO
Une fois le fichier téléchargé il faudra le renommer en tri.cmd
Concernant le fonctionnement, dans un premier temps le script va vous demander le dossier à trier, puis dans un second temps il va demander le dossier contenant les sous-dossiers avec les noms des personnes. Ensuite le script n'a plus besoin de vous, il va travailler tout seul. A la fin du travail vous aurez droit à un récapitulatif succinct et vous pourrez consulter les opérations effectuées qui sont consignées dans un fichier texte portant la date et l'heure de chaque exécution du script.
Le script ne supprime aucun fichier, il se contente de faire des copies.
S'il y a plusieurs milliers de fichiers à traiter, le script peut prendre plusieurs dizaines de minutes, ne vous inquiétez pas.
Si vous avez des questions n'hésitez pas.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionMon ordinateur bloque le script car il craint des menaces sur les parties "folder" et "busy".
Mon service informatique ne m'autorise pas à l'executer car les 3 parties "Focus/Folder/Busy" sont cryptées ...
J'ai demandé à le tester sur une station blanche mais il semble qu'on n'en a pas !
Je ne sais pas quoi faire ....
Merci quand même pour l'aide. Je le testerai chez moi déjà.
Modifié le 19 août 2022 à 15:12
Je peux le modifier pour supprimer les 3 commandes externes (cmdFocus, Wbusy, Wfolder) qui posent problème, c'est plus pour la présentation qu'autre chose.
-
Je vais voir ce que je peux faire.
19 août 2022 à 15:27
Voilà je l'ai modifié, c'est nettement moins beau mais c'est fonctionnel :
@echo off mode con cols=140 lines=35 setlocal enableextensions enabledelayedexpansion ver | find "10.0." >nul && chcp 65001 >nul || chcp 1252 >nul color 0F : -------------------------------------------------------------------------------------- : on définit les variables : -------------------------------------------------------------------------------------- set "filtre=*.*" set "listeFichiers=%TMP%\liste_des_fichiers.txt" for /f "tokens=1,2,3 delims=/ " %%a in ('date /t') do set "maDate=%%c%%b%%a" for /f "tokens=1,2 delims=:" %%a in ('time /t') do set "heure=%%a%%b%time:~6,2%" set "log=%TMP%\tri_%maDate%_%heure%.txt" : -------------------------------------------------------------------------------------- : on choisit le dossier contenant les fichiers à trier : -------------------------------------------------------------------------------------- cls & echo. & echo ### Nom complet (chemin + nom) du dossier à trier : set /p dossierATrier=">>> " if not defined dossierATrier (exit /b 1) if not exist "%dossierATrier%" (exit /b 1) : -------------------------------------------------------------------------------------- : on choisit le dossier contenant les dossiers nominatifs : -------------------------------------------------------------------------------------- echo. & echo ### Nom complet (chemin + nom) du dossier parent contenant les dossiers des personnes : set /p dossierCible=">>> " if not defined dossierCible (exit /b 1) if not exist "%dossierCible%" (exit /b 1) : -------------------------------------------------------------------------------------- : on construit la liste des fichiers à trier : -------------------------------------------------------------------------------------- cd /d "!dossierATrier!" || exit /b 1 cls & echo. & echo Analyse du dossier en cours, merci de bien vouloir patienter quelques minutes ... dir /b /s /a-d %filtre% >"%listeFichiers%" : -------------------------------------------------------------------------------------- : on copie les fichiers correspondants au dossier nominatif : -------------------------------------------------------------------------------------- cd /d "!dossierCible!" || exit /b 1 set compteur=0 for /f "delims=" %%A in ('2^>nul dir /b /ad') do ( cls & echo. & echo ##### Dossier en cours de traitement : %%A echo. for /f "delims=" %%B in ('2^>nul findstr /i "%%A" "%listeFichiers%"') do ( set /a compteur+=1 echo. xcopy "%%~B" "%%~dpnA\" /c /y /l && echo "%%~B"?"%%~dpnA\">>"%log%" title Nombre de fichiers traités : !compteur! ) ) : -------------------------------------------------------------------------------------- : fin du script : -------------------------------------------------------------------------------------- set nbFichiersATraiter=0 for /f "delims=" %%A in ('type "%listeFichiers%"') do set /a nbFichiersATraiter+=1 cls & echo. & echo Résultat du tri : !compteur! fichiers effectivement traités echo. & echo Nombre de fichiers à trier (avant traitement) : %nbFichiersATraiter% fichiers echo. & echo. & pause explorer /select,"%log%" exit
Bonjour barnabe0057,
J'ai pu lancer le script et il trie efficacement les fichiers. Par contre il ne les copie pas dans le dossier de destination :(
J'ai refait un test sur un fichier plus petit et on voit bien qu'il compare les fichiers aux dossiers mais il ne fait pas la copie dans ces dossiers ...
Je te remercie d'avance pour ta réponse
22 août 2022 à 08:37
Je vais voir ce que je peux faire, ce matin je suis un peu occupé, je te recontacte en début d'après-midi.
Super merci !
Modifié le 22 août 2022 à 11:48
Voilà j'ai trouvé le problème, cela venait de l'utilisation du commutateur /L de la commande XCOPY qui simule une copie en affichant le nom des fichiers mais sans les copier réellement.
-
La version corrigée :
@echo off mode con cols=140 lines=35 setlocal enableextensions enabledelayedexpansion ver | find "10.0." >nul && chcp 65001 >nul || chcp 1252 >nul color 0F : -------------------------------------------------------------------------------------- : on définit les variables : -------------------------------------------------------------------------------------- set "filtre=*.*" set "listeFichiers=%TMP%\liste_des_fichiers.txt" for /f "tokens=1,2,3 delims=/ " %%a in ('date /t') do set "maDate=%%c%%b%%a" for /f "tokens=1,2 delims=:" %%a in ('time /t') do set "heure=%%a%%b%time:~6,2%" set "log=%TMP%\tri_%maDate%_%heure%.txt" : -------------------------------------------------------------------------------------- : on choisit le dossier contenant les fichiers à trier : -------------------------------------------------------------------------------------- cls & echo. & echo ^>^>^> Nom complet (chemin + nom) du dossier à trier : set /p dossierATrier=">>> " if not defined dossierATrier (exit /b 1) if not exist "%dossierATrier%" (exit /b 1) : -------------------------------------------------------------------------------------- : on choisit le dossier contenant les dossiers nominatifs : -------------------------------------------------------------------------------------- echo. & echo. & echo ^>^>^> Nom complet (chemin + nom) du dossier parent contenant les dossiers des personnes : set /p dossierCible=">>> " if not defined dossierCible (exit /b 1) if not exist "%dossierCible%" (exit /b 1) : -------------------------------------------------------------------------------------- : on construit la liste des fichiers à trier : -------------------------------------------------------------------------------------- cd /d "!dossierATrier!" || exit /b 1 cls & echo. & echo Analyse du dossier en cours, merci de bien vouloir patienter quelques minutes ... dir /b /s /a-d %filtre% >"%listeFichiers%" : -------------------------------------------------------------------------------------- : on copie les fichiers correspondants au dossier nominatif : -------------------------------------------------------------------------------------- cd /d "!dossierCible!" || exit /b 1 set compteur=0 for /f "delims=" %%A in ('2^>nul dir /b /ad') do ( echo. & echo ############### Dossier en cours de traitement : %%A for /f "delims=" %%B in ('2^>nul findstr /i "%%A" "%listeFichiers%"') do ( set /a compteur+=1 rem echo. xcopy "%%~B" "%%~dpnA\" /c /y >nul && echo "%%~B"?"%%~dpnA\" title Nombre de fichiers traités : !compteur! ) )>>"%log%" : -------------------------------------------------------------------------------------- : fin du script : -------------------------------------------------------------------------------------- set nbFichiersATraiter=0 for /f "delims=" %%A in ('type "%listeFichiers%"') do set /a nbFichiersATraiter+=1 cls & echo. & echo Résultat du tri : !compteur! fichiers effectivement traités echo. & echo Nombre de fichiers à trier (avant traitement) : %nbFichiersATraiter% fichiers echo. & echo. & pause explorer /select,"%log%" exit
Ca fonctionne nickel !
Bravo et merci beaucoup :D
22 août 2022 à 15:10
De rien, je peux passer le sujet en "résolu" alors ?
Bonjour Barnabe0057,
Le script a trop bien fonctionné et j'ai des fichiers copiés en double ou triple car la recherche de correspondance se fait aussi sur une partie de nom/prénom.
Par exemple je retrouve un fichier "CV Dupont Anna.doc" dans le dossier "Dupont Anna" mais aussi dans le dossier "Dupontelle Gérard" et "Martin Anna".
Est-il possible de modifier afin que la recherche soit plus stricte STP ?
Encore merci pour tout !
Modifié le 24 août 2022 à 16:00
Je ne sais pas dire au script que Anna est un prénom et non un nom de famille.
-
Par contre si les fichiers respectent toujours la même convention de nommage "Nom de famille + Prénom", là je pourrais sûrement faire quelque chose.
-
Est-ce que les dossiers respectent une convention de nommage ?
Désolée pour le délai de réponse...
Les noms des dossiers ont tous la même forme : Nom + Prénom
Par contre les fichiers ont soit le nom, soit le prénom, soit les 2 inclus dans leur nom.
Est-il possible que la recherche sur "Anna" par exemple ne recense pas les "Annabelle Annalise Marianna"... ?
Si ce n'est pas possible, je veux bien la modif savec la recherche nom+prénom exactement comme sur les dossiers destination ; tant pis pour les dossiers qui passerons à l'as.
Merci d'avance
1 sept. 2022 à 14:56
Bonjour,
Est-il possible que la recherche sur "Anna" par exemple ne recense pas les "Annabelle Annalise Marianna"... ?
J'ai fait une correction, voici le nouveau code :
@echo off mode con cols=140 lines=35 setlocal enableextensions enabledelayedexpansion ver | find "10.0." >nul && chcp 65001 >nul || chcp 1252 >nul color 0F : -------------------------------------------------------------------------------------- : on définit les variables : -------------------------------------------------------------------------------------- set "filtre=*.*" set "listeFichiers=%TMP%\liste_des_fichiers.txt" for /f "tokens=1,2,3 delims=/ " %%a in ('date /t') do set "maDate=%%c%%b%%a" for /f "tokens=1,2 delims=:" %%a in ('time /t') do set "heure=%%a%%b%time:~6,2%" set "log=%TMP%\tri_%maDate%_%heure%.txt" : -------------------------------------------------------------------------------------- : on choisit le dossier contenant les fichiers à trier : -------------------------------------------------------------------------------------- cls & echo. & echo ^>^>^> Nom complet (chemin + nom) du dossier à trier : set /p dossierATrier=">>> " if not defined dossierATrier (exit /b 1) if not exist "%dossierATrier%" (exit /b 1) : -------------------------------------------------------------------------------------- : on choisit le dossier contenant les dossiers nominatifs : -------------------------------------------------------------------------------------- echo. & echo. & echo ^>^>^> Nom complet (chemin + nom) du dossier parent contenant les dossiers des personnes : set /p dossierCible=">>> " if not defined dossierCible (exit /b 1) if not exist "%dossierCible%" (exit /b 1) : -------------------------------------------------------------------------------------- : on construit la liste des fichiers à trier : -------------------------------------------------------------------------------------- cd /d "!dossierATrier!" || exit /b 1 cls & echo. & echo Analyse du dossier en cours, merci de bien vouloir patienter quelques minutes ... dir /b /s /a-d %filtre% >"%listeFichiers%" : -------------------------------------------------------------------------------------- : on copie les fichiers correspondants au dossier nominatif : -------------------------------------------------------------------------------------- cd /d "!dossierCible!" || exit /b 1 set compteur=0 for /f "tokens=1 delims= " %%A in ('2^>nul dir /b /ad') do ( echo. & echo ############### Dossier en cours de traitement : %%A for /f "delims=" %%B in ('2^>nul findstr /i /r "\<%%A\>" "%listeFichiers%"') do ( set /a compteur+=1 rem echo. xcopy "%%~B" "%%~dpnA\" /c /y >nul && echo "%%~B"?"%%~dpnA\" title Nombre de fichiers traités : !compteur! ) )>>"%log%" : -------------------------------------------------------------------------------------- : fin du script : -------------------------------------------------------------------------------------- set nbFichiersATraiter=0 for /f "delims=" %%A in ('type "%listeFichiers%"') do set /a nbFichiersATraiter+=1 cls & echo. & echo Résultat du tri : !compteur! fichiers effectivement traités echo. & echo Nombre de fichiers à trier (avant traitement) : %nbFichiersATraiter% fichiers echo. & echo. & pause explorer /select,"%log%" exit
Modifié le 2 sept. 2022 à 06:33
Dans cette version le script se base uniquement sur le nom de famille du dossier, le prénom n'étant pas fiable puisque plusieurs personnes peuvent avoir le même prénom.
-
La recherche est plus stricte également : si le nom à rechercher est anna elle ne prendra plus en compte les annabelle annalisa, ...
2 sept. 2022 à 14:35
Génial Merci encore !
Encore une petite chose : les dernier script crée des dossiers au lieu de dispatcher dans les dossiers déjà existants ... est-il possible de rectifier ?
Merci et bon week-end si c'est le cas !
8 sept. 2022 à 11:40
Je vais voir ce que je peux faire.
Je suis vraiment désolée de vous solliciter à nouveau ...
J'ai refait des tests et en fait le script crée des nouveaux dossiers quand les dossiers existants ne sont pas au nom strict de la recherche.
Par exemple :
Pour le dossier "Dupont Marie" , il va créer un dossier "Dupont" et y intégrer les docs incluant le nom "Dupont".
Du coup je me retrouve avec 2 dossiers : un "Dupont" avec documents, un "Dupont Marie" que j'avais déjà créé; vide.
J'ai fait un test avec un dossier "tata" et un fichier "tata", il a collé le fichier "tata" dans le dossier "tata" sans créer de nouveau dossier.
J'espère que ces informations pourront aider. merci encore !
14 sept. 2022 à 16:32
Pas de problème, je vais corriger ça.