[Batch] - Manipulation fichiers en masse

Fermé
yaphilde Messages postés 35 Date d'inscription lundi 9 janvier 2017 Statut Membre Dernière intervention 25 octobre 2022 - 4 avril 2018 à 10:46
yaphilde Messages postés 35 Date d'inscription lundi 9 janvier 2017 Statut Membre Dernière intervention 25 octobre 2022 - 5 avril 2018 à 12:36
Bonjour et merci d'avance de l'attention que vous porterez à ma demande,
Nous sommes en train de restructurer notre infrastructure fichiers.
J'ai un modèle actuellement en production que nous devons transposer dans une nouvelle arborescence

Arborescence actuellement en production pour chaque usager (il y en a des centaines). Chaque usager à la même arborescence.

---------------------------NOM de l'usager-----------------------
+---R1 Accueillir
| +---01 - Dossier admission
| | +---01 - 1er contact
| | +---02 - Bilans
| | +---03 - Semaine observation
| | +---04 - Courriers
| | \---05 - Dossier administratif Accueil
| +---02 - MDPH
| | +---01 - Dossier
| | \---02 - Notification
| \---03 - Contrat de séjour - DIPC
+---R2 Accompagner
| +---01 - PIA
| | +---01 - PPS
| | +---02 - GEVASCO
| | +---03 - Plan de compensation
| | +---04 - Projet de soins
| | +---05 - PIA
| | \---06 - Suivi PIA
| +---02 - EDT
| | +---2015 - 2016
| | \---2017 - 2018
| +---03 - Suivi administratif
| | +---01 - Courriers
| | +---02 - RDV Famille
| | \---03 - Evenements Indésirables
..........
...............
...................
-----------------------Fin de l'arborescence de production-------------------------



Nous souhaitons mettre l'arborescence suivante en place
---------------------------NOM de l'usager-----------------------

+---administratif
| +---Adresses
| +---Autre décision administrative
| +---Décision administrative CDA
| +---Environnement
| +---Equipe soignante et d'accompagnement
| +---Identité
| +---Membres de la famille
| +---Mesure de protection
| +---Parcours de la personne
| +---Signatures
| +---Séjours
| \---Transport
+---Dossier de Liaison d'Urgence DLU
| +---DLU administratif
| \---DLU médical
\---Parcours de vie
+---Alimentation
| +---Allergies et troubles associés
| +---Modalités
| \---Régimes
+---Comportement
| +---Comportement habituel
| +---Intérêt et occupations favorites
| +---Sommeil - Modalités
| +---Sommeil - Troubles
| +---Troubles du comportement
| \---Vie affective et sexuelle
+---Dépendance et autonomie
| +---Déplacements et transferts
| +---Sphinctérienne
| \---Toilette-habillage-installation
.........
..................
.........................
-----------------------Fin de la nouvelle arborescence de production-------------------------

Donc ma problématique est:
1 - Pour chaque dossier usager trouver dans l'ancienne arborescence, je créer une structure correspondant à ma nouvelle arborescence. (je sais le faire un par un mais je sais pas bien le faire en automatique ( boucle for /f)

2 - Je souhaite, par exemple, copier tous les fichiers contenus dans le répertoire
"C:\NOM de l'usager\R1 Accueillir\01 - Dossier admission\05 - Dossier administratif Accueil"
vers
"F:\NOM de l'usager\administratif\Autre décision administrative"

3 - Je prends un autre cas proche du précédent mais là il faudrait copier tous les fichiers contenus dans un dossier et tout les fichiers contenu dans ces sous-dossiers vers un nouvel emplacement, par exemple
Copie de tous les fichiers contenus dans
"C:\NOM de l'usager\R2 Accompagner\tous les fichiers contenu dans le dossier et les sous dossier"
vers
""F:\NOM de l'usager\Parcours de vie\Comportement\Comportement habituel\


PS1: Je précise que les fichiers et les dossiers qui sont traités sont susceptibles d'avoir des accents.
PS2: Dans le traitement souhaité je ne souhaite pas copier les dossiers, juste l'ensemble des fichiers (différents formats)

Encore une fois merci d'avance de l'attention qui sera faite à ma demande.

yaphilde

A voir également:

2 réponses

barnabe0057 Messages postés 14439 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 14 avril 2024 4 905
Modifié le 4 avril 2018 à 23:44
Bonjour,

Pour la première partie tu peux faire comme ça :

@echo off
setlocal enableextensions
chcp 1252 >nul

set racine=%USERPROFILE%\Desktop\Yaphilde

if not exist "%racine%" (mkdir "%racine%")

cd /d %racine%

set Administratif="Adresses" "Autre décision administrative" "Décision administrative CDA" "Environnement" "Equipe soignante et d'accompagnement" "Identité" "Membres de la famille" "Mesure de protection" "Parcours de la personne" "Signatures" "Séjours" "Transport"
set DossierLiaison="DLU administratif" "DLU médical" "Parcours de vie"
set Alimentation="Allergies et troubles associés" "Modalités" "Régimes"
set Comportement="Comportement habituel" "Intérêt et occupations favorites" "Sommeil - Modalités" "Sommeil - Troubles" "Troubles du comportement" "Vie affective et sexuelle"
set Dep_autonomie="Déplacements et transferts" "Sphinctérienne" "Toilette-habillage-installation"


call :arbre "Administratif" %Administratif%
call :arbre "Dossier de Liaison d'Urgence DLU" %DossierLiaison%
call :arbre "Alimentation" %Alimentation%
call :arbre "Comportement" %Comportement%
call :arbre "Dépendance et autonomie" %Dep_autonomie%

pause
exit

:arbre
if not exist "%~1" (mkdir "%~1")
pushd "%~1"
for %%A in (%*) do (if not exist "%%~A" (mkdir "%%~A" && echo %%~A))
rmdir "%~1"
popd

goto :eof

rem

La partie soulignée est à modifier à ta guise.

Concernant les parties 2 et 3 il faudrait la liste complète des traitements que tu veux opérer.


0
yaphilde Messages postés 35 Date d'inscription lundi 9 janvier 2017 Statut Membre Dernière intervention 25 octobre 2022 2
5 avril 2018 à 10:46
Mille merci Barnabe de prendre en compte ma demande,
Je vais tester ton code dans la journée pour la partie 1.

En fait pour les parties 2 et 3, il y a énormément de traitement à faire. Et le but du jeu n'est pas que tu fasses tout :-p....heuuu quoi que ;-)! ....L'idée c'est que je puisse comprendre la logique afin de la reproduire sur l'ensemble de mon infrastructure.

Mais je vais essayé d'être plus explicite sur ces demandes:

Demande 2: copier tous les fichiers contenus dans un répertoire et qui ne contient pas de sous répertoire.
Exemple:
Copier tous les fichiers qui sont contenus dans "dossier d'admission" dans le dossier de destination "DLU administratif"
source - Fichiers contenus dans 01 - contact
+---R1 Accueillir
| +---01 - Dossier admission
| | +---01 - 1er contact

vers

destination
+---Dossier de Liaison d'Urgence DLU
| +---DLU administratif

donc en chemin ca donne ca:
"C:\NOM de l'usager\R1 Accueillir\01 - Dossier admission\01 - 1er contact"
vers
"F:\NOM de l'usager\Dossier de Liaison d'Urgence DLU\DLU administratif"



Demande 3: copier tous les fichiers contenus dans un répertoire qui contient lui-même des sous répertoires. Je ne souhaite pas récupéré l’arborescence je ne souhaite que récupérer les fichiers qui en font partis.
Exemple:

C'est un peu la même chose
source - Fichiers contenus dans TOUT le dossier "R2 Accompagner" ET tous les FICHIERS contenus dans les sous répertoires

+---R2 Accompagner
| +---01 - PIA
| | +---01 - PPS
| | +---02 - GEVASCO
| | +---03 - Plan de compensation
| | +---04 - Projet de soins
| | +---05 - PIA


Destination
+---Alimentation
| +---Allergies et troubles associés
| +---Modalités

donc en chemin ca donne ca:
"C:\NOM de l'usager\R2 Accompagner\ *.* (sans les répertoires)"
vers
"F:\NOM de l'usager\Alimentation\Modalités"

J'espère que je suis à peu près clair et que c'est faisable.

Merci encore Barnabe de m'aider.
@++ et excellente journée à toi
0
barnabe0057 Messages postés 14439 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 14 avril 2024 4 905 > yaphilde Messages postés 35 Date d'inscription lundi 9 janvier 2017 Statut Membre Dernière intervention 25 octobre 2022
5 avril 2018 à 12:25
Merci ma journée est déjà bonne puisque je suis en congé ;)
0
yaphilde Messages postés 35 Date d'inscription lundi 9 janvier 2017 Statut Membre Dernière intervention 25 octobre 2022 2
5 avril 2018 à 12:27
Rhoooo tu es un grand chanceux...surtout que nous à bordeaux il fait Magnifique!!
Profites bien @++
0
barnabe0057 Messages postés 14439 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 14 avril 2024 4 905
Modifié le 5 avril 2018 à 12:37
Voilà une nouvelle version (dans laquelle je te laisse du travail) :

@echo off
setlocal enableextensions
chcp 1252 >nul

set racine=%USERPROFILE%\Desktop\Yaphilde

if not exist "%racine%" (mkdir "%racine%")

cd /d %racine%

set Administratif="Adresses" "Autre décision administrative" "Décision administrative CDA" "Environnement" "Equipe soignante et d'accompagnement" "Identité" "Membres de la famille" "Mesure de protection" "Parcours de la personne" "Signatures" "Séjours" "Transport"
set DossierLiaison="DLU administratif" "DLU médical" "Parcours de vie"
set Alimentation="Allergies et troubles associés" "Modalités" "Régimes"
set Comportement="Comportement habituel" "Intérêt et occupations favorites" "Sommeil - Modalités" "Sommeil - Troubles" "Troubles du comportement" "Vie affective et sexuelle"
set Dep_autonomie="Déplacements et transferts" "Sphinctérienne" "Toilette-habillage-installation"

cls & echo. & echo ########## Création de la nouvelle arborescence ##########
echo.
call :arbre "Administratif" %Administratif%
call :arbre "Dossier de Liaison d'Urgence DLU" %DossierLiaison%
call :arbre "Alimentation" %Alimentation%
call :arbre "Comportement" %Comportement%
call :arbre "Dépendance et autonomie" %Dep_autonomie%

timeout /t 5

cls & echo. & echo ########## Clonage des fichiers vers la nouvelle arborescence ##########
echo.
call :copie_classique "%USERPROFILE%\Desktop\traitements2.ini"
call :copie_recursive "%USERPROFILE%\Desktop\traitements3.ini"

echo. & pause
exit

:arbre
if not exist "%~1" (mkdir "%~1")
pushd "%~1"
for %%A in (%*) do (if not exist "%%~A" (mkdir "%%~A" && echo # %%~A))
rmdir "%~1"
popd

goto :eof


:copie_classique
for /f "usebackq tokens=1,2 delims=#" %%A in ("%~1") do (
for /f "delims=" %%E in ('2^>nul dir /b /a-d "%%~A"') do (xcopy "%%~A\%%~E" "%%~B" /V /C /F /G /K /B >nul & echo %%~A\%%~E)
)
goto :eof


:copie_recursive
for /f "usebackq tokens=1,2 delims=#" %%A in ("%~1") do (
for /f "delims=" %%E in ('2^>nul dir /s /b /a-d "%%~A"') do (xcopy "%%~E" "%%~B" /V /C /F /G /K /B >nul & echo %%~E)
)
goto :eof

rem

Alors le principe ici c'est de s'appuyer sur des fichiers textes qui contiendront les traitements à effectuer.

traitements2.ini correspond à ta demande n°2
traitements3.ini correspond à ta demande n°3

Ces 2 fichiers seront de la forme %source% - %destination%, par exemple :

"C:\NOM de l'usager\R1 Accueillir\01 - Dossier admission\01 - 1er contact"###"F:\NOM de l'usager\Dossier de Liaison d'Urgence DLU\DLU administratif"

0
yaphilde Messages postés 35 Date d'inscription lundi 9 janvier 2017 Statut Membre Dernière intervention 25 octobre 2022 2
5 avril 2018 à 12:36
Merci Barnabe...Je test ça dans l'aprem...et je te tiens au jus.
Et surtout profites !
@++
0