[BATCH] - Manipulation en masse: Copie et renommag

Résolu/Fermé
yaphilde Messages postés 35 Date d'inscription lundi 9 janvier 2017 Statut Membre Dernière intervention 25 octobre 2022 - 14 févr. 2018 à 12:28
yaphilde Messages postés 35 Date d'inscription lundi 9 janvier 2017 Statut Membre Dernière intervention 25 octobre 2022 - 26 févr. 2018 à 12:45
Bonjour et merci d'avance de l'attention que vous porterez à mon message,

Je vous expose ce que je souhaiterai faire au final:
P:\PROCESSUS DE REALISATION\00 - USAGER\XXXXX\R2 Accompagner\06 - Accompagnement pluridisciplinaire\07- Suivi d'activité\Outil suivi activité 2018 - XXXXX.xlsm

La majorité du chemin existe et j'ai des centaines d'usagers différents. Il y a beaucoup d'autres dossiers et sous-dossiers

XXXXX: correspond au NOM et Prénom de mes usagers (c'est un dossier). C'est ma variable.
Dans le dossier 06 - Accompagnement pluridisciplinaire, je créer un sous-dossier qui se nomme 07- Suivi d'activité.
Dans ce nouveau dossier il faut que j'y insère le fichier Outil suivi activité 2018.xlsm.
Mon original se situe sur ce chemin: a:\Mes modèles\Outil suivi activité 2018.xlsm

Et pour finir je souhaite renommer le fichier nouvellement inséré en lui rajoutant les informations suivantes "- XXXXX" qui correspond au nom du dossier XXXXX.

J'espère être clair, s'il y a besoin je suis dispo.

J'ai déja une bonne partie du code.
Dans chaque dossier XXXXX je créé le dossier 07- Suivi d'activité et je lui applique des droits NTFS


@echo off
::Nouveau dossier dans le dossier realisation avec droits NTFS définient
Setlocal enableextensions

set DossierSource=F:\CSES\PARTAGE\PROCESSUS DE REALISATION\00 - USAGER
set Cible=06 - Accompagnement pluridisciplinaire
set NouveauDossier=07- Suivi d'activité


cd /d %DossierSource% || exit /B 1

for /f "tokens=*" %%E in ('dir /s /b /ad') do (
  if /i "%%~nE"=="%Cible%" (
    mkdir "%%~dpnE\%NouveauDossier%"
    icacls "%%~dpnE\%NouveauDossier%" /inheritance:e /grant *S-1-5-21-1504173220-2678980005-1044320739-1104:(OI^)(CI^)(M^)
  )
)

pause


Il ne reste plus qu'à copier mon fichier Excel dans son emplacement de destination et à le renommer., mais je bloque un peu.

Encore une fois merci d'avance



1 réponse

barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
14 févr. 2018 à 22:09
Bonsoir,

Je n'ai pas eu le temps de tester mais ça devrait le faire :

@echo off
::Nouveau dossier dans le dossier realisation avec droits NTFS définis
Setlocal enableextensions

set DossierSource=P:\PROCESSUS DE REALISATION\00 - USAGER
set Cible=06 - Accompagnement pluridisciplinaire
set NouveauDossier=07- Suivi d'activité


cd /d %DossierSource% || exit /B 1

for /f "tokens=*" %%E in ('dir /s /b /ad') do (
if /i "%%~nE"=="%Cible%" (call :fonction "%%~dpnE" "%NouveauDossier%")
)

pause
exit /B 0

:fonction
if not exist "%~1\%~2" (
mkdir "%~1\%~2"
icacls "%~1\%~2" /inheritance:e /grant *S-1-5-21-1504173220-2678980005-1044320739-1104:(OI^)(CI^)(M^)
)

for /f "tokens=1-4,* delims=\" %%A in ('echo %~1') do (
copy /D /V /Y "a:\Mes modèles\Outil suivi activité 2018.xlsm" "%~1\%~2\Outil suivi activité 2018 - %%~D.xlsm"
)

goto :eof

rem


0
yaphilde Messages postés 35 Date d'inscription lundi 9 janvier 2017 Statut Membre Dernière intervention 25 octobre 2022 2
15 févr. 2018 à 16:11
Coucou Barnabe,
j'espérait secrètement que ce soit toi qui prenne en charge mon probleme ;-)!
Et surtout merci!

Alors pour commencer ça ne fonctionne pas comme je veux.

J'ai deux problèmes:
Pour la création du dossier "07 - Suivi d'activité" j'ai un problème avec l'accent il me met un signe cabalistique à la place du"é", "d'activité".
Et pareil si je laisse l'accent dans mon fichier excel j'ai la copie qui ne fonctionne pas

J'ai rajouté la ligne suivante à mon code qui habituellement résous mes problèmes d'accent:
chcp 28591 > nul
Mais cela n'agit pas

Et le second problème que j'ai, c'est le renommage du fichier dans le dossier de l'usager, il me rajoute au nom du fichier "Outil suivi activite 2018 - SuivAct.xlsm" alors que je devrais avoir le nom de l'usager à la place de SuivAct.

Point important j'ai changé mes variables de localisation (je me suis mis en environnement de test)
voici mon code:

@echo off
::Nouveau dossier dans le dossier realisation avec droits NTFS définis
chcp 28591 > nul
Setlocal enableextensions

set DossierSource=F:\CSES\Modele\SuivAct\00 - USAGER
set Cible=06 - Accompagnement pluridisciplinaire
set NouveauDossier=07- Suivi d'activite


cd /d %DossierSource% || exit /B 1

for /f "tokens=*" %%E in ('dir /s /b /ad') do (
if /i "%%~nE"=="%Cible%" (call :fonction "%%~dpnE" "%NouveauDossier%")
)

pause
exit /B 0

:fonction
if not exist "%~1\%~2" (
mkdir "%~1\%~2"
icacls "%~1\%~2" /inheritance:e /grant *S-1-5-21-1504173220-2678980005-1044320739-1104:(OI^)(CI^)(M^)
)

for /f "tokens=1-4,* delims=\" %%A in ('echo %~1') do (
copy /D /V /Y "F:\CSES\PARTAGE\ESPACES DE TRAVAIL\06_Service informatique\Excel\Outil suivi activite 2018.xlsm" "%~1\%~2\Outil suivi activite 2018 - %

%~D.xlsm"
)

goto :eof

rem


Pour information j'ai appliqué les modifications suivantes à ton code:
Ligne 3 j'ai rajouté:
chcp 28591 > nul

C'est, me semblait-il pour gérer les accents

Ligne 6 j'ai modifié le chemin source
set DossierSource=F:\CSES\Modele\SuivAct\00 - USAGER


Ligne 8 et 27 pour pouvoir appliquer mes tests j'ai supprimé l'accent de "activité" et j'ai renommé mon fichier excel pour que lui aussi n'ai plus d'accent. Mais il est vrai que j'aimerai pouvoir les retrouver :-)!

set NouveauDossier=07- Suivi d'activite


copy /D /V /Y "F:\CSES\PARTAGE\ESPACES DE TRAVAIL\06_Service informatique\Excel\Outil suivi activite 2018.xlsm" "%~1\%~2\Outil suivi activite 2018 - %



Merci d'avance Barnabe
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > yaphilde Messages postés 35 Date d'inscription lundi 9 janvier 2017 Statut Membre Dernière intervention 25 octobre 2022
Modifié le 16 févr. 2018 à 05:14
Bonjour yaphilde, pour le premier problème essaie chcp 1252 >nul ou bien le code page par défaut chcp 850 >nul

Si ça ne fonctionne toujours pas, il faudrait vérifier l'encodage de caractères utilisé par Excel (Unicode, UTF-8, ANSI, ...)

Concernant le deuxième problème c'est normal c'est parce que tu as modifié le dossier source, il faut modifier le FOR pour qu'il récupère la bonne partie :

@echo off
::Nouveau dossier dans le dossier realisation avec droits NTFS définis
Setlocal enableextensions

set DossierSource=F:\CSES\Modele\SuivAct\00 - USAGER
set Cible=06 - Accompagnement pluridisciplinaire
set NouveauDossier=07- Suivi d'activite


cd /d %DossierSource% || exit /B 1

for /f "tokens=*" %%E in ('dir /s /b /ad') do (
if /i "%%~nE"=="%Cible%" (call :fonction "%%~dpnE" "%NouveauDossier%")
)

pause
exit /B 0

:fonction
if not exist "%~1\%~2" (
mkdir "%~1\%~2"
icacls "%~1\%~2" /inheritance:e /grant *S-1-5-21-1504173220-2678980005-1044320739-1104:(OI^)(CI^)(M^)
)

for /f "tokens=1-6,* delims=\" %%A in ('echo %~1') do (
copy /D /V /Y "F:\CSES\PARTAGE\ESPACES DE TRAVAIL\06_Service informatique\Excel\Outil suivi activite 2018.xlsm" "%~1\%~2\Outil suivi activite 2018 - %%~F.xlsm"
)

goto :eof

rem
0
yaphilde Messages postés 35 Date d'inscription lundi 9 janvier 2017 Statut Membre Dernière intervention 25 octobre 2022 2
16 févr. 2018 à 09:47
Bonjour Barnabe :-)
Ton code fonctionne merveilleusement bien dans mon environnement de test.
Vraiment un grand merci.
Pour les accents j'ai renseigné
chcp 1252 >nul

et c'est bon ça résout mon problème

A coté de cela j'ai une petite question histoire de bien comprendre
Je vois bien la modification que tu fais dans le code en fonction du chemin au niveau des tokens.
Le code pour environnement de prod:

for /f "tokens=1-4,* delims=\" %%A in ('echo %~1') do (
copy /D /V /Y "a:\Mes modèles\Outil suivi activité 2018.xlsm" "%~1\%~2\Outil suivi activité 2018 - %%~D.xlsm"
)

tokens=1-4



Le code pour mon environnement de test:

for /f "tokens=1-6,* delims=\" %%A in ('echo %~1') do (
copy /D /V /Y "F:\CSES\PARTAGE\ESPACES DE TRAVAIL\06_Service informatique\Excel\Outil suivi activite 2018.xlsm" "%~1\%~2\Outil suivi activite 2018 - %%~F.xlsm"
)

tokens=1-6

Par contre je ne comprend pas véritablement ce qui fait que ça passe de 4 à 6.
Aurais tu une petite explication afin de m'éclairer.

Merci encore
0
yaphilde Messages postés 35 Date d'inscription lundi 9 janvier 2017 Statut Membre Dernière intervention 25 octobre 2022 2
16 févr. 2018 à 12:06
Haa si j'ai vu également (jeu des différences :-) )sur ton code que je t'ai donné précédement
que tu passais de
%%~D.xlsm à %%~F.xlsm

Est-ce complètement subjectif ou il y a t-il une raison particulière?
Merci
@++
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > yaphilde Messages postés 35 Date d'inscription lundi 9 janvier 2017 Statut Membre Dernière intervention 25 octobre 2022
17 févr. 2018 à 10:31
Dans ma boucle FOR j'utilise le \ comme délimiteur, appliqué à la chaine :
F:\CSES\Modele\SuivAct\00 - USAGER\XXXXXX\.............

Ca donne donc :

token 1 (%%A) = F:
token 2 (%%B) = CSES
token 3 (%%C) = Modele
token 4 (%%D) = SuivAct
token 5 (%%E) = 00 - USAGER
token 6 (%%F) = XXXXXX
token * (%%G) = tout le reste

J'espère que c'est assez clair ;)
0