Dispatch de fichiers dans les dossiers correspondants
Résolubarnabe0057 Messages postés 14455 Date d'inscription Statut Contributeur Dernière intervention -
- Dispatch de fichiers dans les dossiers correspondants
- Afficher la taille des dossiers - Guide
- Renommer tous les fichiers d'un dossier - Guide
- Synchronisation des dossiers avec abonnement - Forum Mail
- Téléchargez cette archive (dossier compressé). en extraire tous les fichiers dans un dossier local. quel fichier contient l’expression trouverpix ? - Forum Windows 7
- Expression régulière pour extraire des infos - Forum Programmation
15 réponses
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 !
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à.
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
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
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 !
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
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
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, ...
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 !
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 !