Dispatch de fichiers dans les dossiers correspondants

Résolu/Fermé
Adebdx33000 - 18 août 2022 à 16:05
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

Bonjour,

J'aimerais que l'on m'aide à rédiger un script pour transférer des fichiers dans les dossiers correspondants.

Les nom de ces fichiers contiennent les noms de personnes et les dossiers sont aux noms de ces mêmes personnes.

Exemple :

Fichiers : Lettre Dupond.doc - CV Martin.pdf - Juarez Budget.xls

Dossiers : Dupond - Martin - Juarez ...

Les difficultés :

-les noms sont à des places aléatoires dans les noms des fichiers

-les fichiers sont dispersés dans des dossiers/sous-dossiers.

Je vous remercie d'avance pour votre aide


Windows / Edge 104.0.1293.54

15 réponses

barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 918
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 ?



0

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 !

0
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 918
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.

0

C'est Windows 10 Pro

Super merci !

0
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 918
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.



0

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

Posez votre question

Je teste ça et je vous fait un retour.

Merci beaucoup !!

0

Mon 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à.

0
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 918
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.

0
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 918 > barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024
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
0

J'ai pu le lancer merci beaucoup, c'est génial !!

Bravo pour le travail !

0

 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

0
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 918
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.

0

Super merci !

0
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 918
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
0

Ca fonctionne nickel !

Bravo et merci beaucoup :D

0
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 918
22 août 2022 à 15:10

De rien, je peux passer le sujet en "résolu" alors ?

0

Oui,pardon !

0

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 !

0
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 918
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 ?

0

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

0
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 918
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
0
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 918 > barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024
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, ...

0
Adebdx33000 > barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024
2 sept. 2022 à 14:35

Génial Merci encore !

0

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 !

0
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 918
8 sept. 2022 à 11:40

Je vais voir ce que je peux faire.

0

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 !

0
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 918
14 sept. 2022 à 16:32

Pas de problème, je vais corriger ça.

0