Boucle FOR et variable issu d'un fichier tiers [Résolu]

yaphilde 20 Messages postés lundi 9 janvier 2017Date d'inscription 4 décembre 2017 Dernière intervention - 9 janv. 2017 à 09:55 - Dernière réponse : barnabe0057 11656 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention
- 9 janv. 2017 à 13:10
Bonjour à tous et merci d’avance de l’aide que vous m’apporterez
Voici mon problème
J’ai 2 fichiers
« Usager.txt » qui contient ma liste d’usager. Chaque ligne correspond au « NOM » et « Prénom » de l’usager il se présente sous cette forme :
Usager.txt
Ce fichier contient ma liste d’usager. Chaque ligne correspond au NOM et Prénom de l’usager il se présente sous cette forme :
DELON Alain
BARDOT Brigitte
PITT Brad


ACL.txt
Ce fichier contient la définition de droits des usagers. Il se présente sous cette forme :
"\\?\F:\CSES\Modele\01 - ACL\template\R1 Accueillir\01 - Dossier admission\04 - Courriers",1,"O:BAG:DU"
"\\?\F:\CSES\Modele\01 - ACL\template\R1 Accueillir\01 - Dossier admission\05 - Dossier administratif Accueil",1,"O:BAG:DU"
"\\?\F:\CSES\Modele\01 - ACL\template\R1 Accueillir\02 - MDPH",1,"O:BAG:DUD:AI(A;OICI;0x1301bf;;;S-1-5-21-1504173220-2678980005-1044320739-1701)"
"\\?\F:\CSES\Modele\01 - ACL\template\R1 Accueillir\02 - MDPH\01 - Dossier",1,"O:BAG:DU"
"\\?\F:\CSES\Modele\01 - ACL\template\R1 Accueillir\02 - MDPH\02 - Notification",1,"O:BAG:DU"
"\\?\F:\CSES\Modele\01 - ACL\template\R1 Accueillir\03 - Contrat de séjour - DIPC",1,"O:BAG:DU"

J’aimerai faire un batch qui me permette de faire la procédure suivante :
Créer un fichier « ACLfull.txt » qui contient l’ensemble des résultats de la boucle suivante :
Pour chaque occurrence de ligne dans le fichier usager.txt
Remplacer dans le fichier « ACL.txt » le mot « template » par le NOM Prénom de l’usager.

Je pense qu’il faut utiliser la commande « FOR /F » mais j’ai beaucoup de difficulté à obtenir un résultat satisfaisant.
Mille mercis d’avance
Afficher la suite 
20Messages postés lundi 9 janvier 2017Date d'inscription 4 décembre 2017 Dernière intervention

11 réponses

Répondre au sujet
barnabe0057 11656 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 9 janv. 2017 à 10:16
0
Utile
Bonjour,

Si je comprend bien, ACLfull.txt contiendra plusieurs fois le fichier ACL.txt, est-ce bien cela ?
Commenter la réponse de barnabe0057
yaphilde 20 Messages postés lundi 9 janvier 2017Date d'inscription 4 décembre 2017 Dernière intervention - 9 janv. 2017 à 10:25
0
Utile
Coucou,
merci de te pencher sur mon problème
Oui c'est bien ca. Le fichier ACLFull.txt contiendra plusieurs fois le fichier ACL.txt
Pour le moment j'ai un code de ce type là où la ligne:
set ContenuModifie=Alain Delon
doit devenir une variable issue du fichier usager.txt

@echo Off
cls
set FichierATraiter=c:\DroitsUsager\ACL.txt
set FichierDeSortie= c:\DroitsUsager\ACLFull.txt
set Source=template
set ContenuModifie=Alain Delon
for /f "usebackq delims=*" %%T in ("%FichierATraiter%") do (
Set TempVar=%%T
set TempVar=!TempVar:%Source%=%ContenuModifie%!
echo !TempVar!>>"%FichierDeSortie%"
endlocal
Commenter la réponse de yaphilde
barnabe0057 11656 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 9 janv. 2017 à 10:58
0
Utile
Ca devrait ressembler à ça à peu de choses près :

@echo Off
Setlocal enableextensions enabledelayedexpansion

set FichierATraiter=c:\DroitsUsager\ACL.txt
set FichierDeSortie= c:\DroitsUsager\ACLFull.txt

set usager=c:\DroitsUsager\Usager.txt

for /f "tokens=* delims=" %%A in ("%usager%") do (
set nomprenom=%%A

for /f "tokens=* delims=" %%T in ("%FichierATraiter%") do (
Set TempVar=%%T
call set TempVar=!!TempVar:template=%nomprenom%!!
echo !TempVar! >> %FichierDeSortie%
)

)

Endlocal
Commenter la réponse de barnabe0057
yaphilde 20 Messages postés lundi 9 janvier 2017Date d'inscription 4 décembre 2017 Dernière intervention - 9 janv. 2017 à 11:00
0
Utile
Merci,
je regarde si ça fonctionne de suite
Je te tiens au jus
Commenter la réponse de yaphilde
yaphilde 20 Messages postés lundi 9 janvier 2017Date d'inscription 4 décembre 2017 Dernière intervention - 9 janv. 2017 à 11:28
0
Utile
je viens de faire le test...et non ca ne me renvoie pas la bonne information
voici le contenu du fichier nouvellement créé ACLfull.txt:

c:\DroitsUsager\ACL.txt 
Commenter la réponse de yaphilde
yaphilde 20 Messages postés lundi 9 janvier 2017Date d'inscription 4 décembre 2017 Dernière intervention - 9 janv. 2017 à 12:02
0
Utile
J'ai modifié ton code de:
tokens=* delims=

en
usebackq delims=*


Il y a du mieux mais c'est pas encorde ca. voici le fichier ACLFull.txt généré:

"\\?\F:\CSES\Modele\01 - ACL\\R1 Accueillir\01 - Dossier admission\04 - Courriers",1,"O:BAG:DU" 
"\\?\F:\CSES\Modele\01 - ACL\\R1 Accueillir\01 - Dossier admission\05 - Dossier administratif Accueil",1,"O:BAG:DU"
"\\?\F:\CSES\Modele\01 - ACL\\R1 Accueillir\02 - MDPH",1,"O:BAG:DUD:AI(A;OICI;0x1301bf;;;S-1-5-21-1504173220-2678980005-1044320739-1701)"
"\\?\F:\CSES\Modele\01 - ACL\\R1 Accueillir\02 - MDPH\01 - Dossier",1,"O:BAG:DU"
"\\?\F:\CSES\Modele\01 - ACL\\R1 Accueillir\02 - MDPH\02 - Notification",1,"O:BAG:DU"
"\\?\F:\CSES\Modele\01 - ACL\\R1 Accueillir\03 - Contrat de séjour - DIPC",1,"O:BAG:DU"
"\\?\F:\CSES\Modele\01 - ACL\\R1 Accueillir\01 - Dossier admission\04 - Courriers",1,"O:BAG:DU"
"\\?\F:\CSES\Modele\01 - ACL\\R1 Accueillir\01 - Dossier admission\05 - Dossier administratif Accueil",1,"O:BAG:DU"
"\\?\F:\CSES\Modele\01 - ACL\\R1 Accueillir\02 - MDPH",1,"O:BAG:DUD:AI(A;OICI;0x1301bf;;;S-1-5-21-1504173220-2678980005-1044320739-1701)"
"\\?\F:\CSES\Modele\01 - ACL\\R1 Accueillir\02 - MDPH\01 - Dossier",1,"O:BAG:DU"
"\\?\F:\CSES\Modele\01 - ACL\\R1 Accueillir\02 - MDPH\02 - Notification",1,"O:BAG:DU"
"\\?\F:\CSES\Modele\01 - ACL\\R1 Accueillir\03 - Contrat de séjour - DIPC",1,"O:BAG:DU"
"\\?\F:\CSES\Modele\01 - ACL\\R1 Accueillir\01 - Dossier admission\04 - Courriers",1,"O:BAG:DU"
"\\?\F:\CSES\Modele\01 - ACL\\R1 Accueillir\01 - Dossier admission\05 - Dossier administratif Accueil",1,"O:BAG:DU"
"\\?\F:\CSES\Modele\01 - ACL\\R1 Accueillir\02 - MDPH",1,"O:BAG:DUD:AI(A;OICI;0x1301bf;;;S-1-5-21-1504173220-2678980005-1044320739-1701)"
"\\?\F:\CSES\Modele\01 - ACL\\R1 Accueillir\02 - MDPH\01 - Dossier",1,"O:BAG:DU"
"\\?\F:\CSES\Modele\01 - ACL\\R1 Accueillir\02 - MDPH\02 - Notification",1,"O:BAG:DU"
"\\?\F:\CSES\Modele\01 - ACL\\R1 Accueillir\03 - Contrat de séjour - DIPC",1,"O:BAG:DU"


il y a du mieux mais ce n'est pas encore ca.
Si tu as d'autres idées je suis preneur :-)
Commenter la réponse de yaphilde
yaphilde 20 Messages postés lundi 9 janvier 2017Date d'inscription 4 décembre 2017 Dernière intervention - 9 janv. 2017 à 12:03
0
Utile
oups voici mon code tel qu'il est lors de ce dernier test:
@echo Off
Setlocal enableextensions enabledelayedexpansion

set FichierATraiter=c:\DroitsUsager\ACL.txt
set FichierDeSortie=c:\DroitsUsager\ACLFull.txt

set usager=c:\DroitsUsager\Usagers.txt

for /f "usebackq delims=*" %%A in ("%usager%") do (
set nomprenom=%%A
echo %%A

for /f "usebackq delims=*" %%T in ("%FichierATraiter%") do (
Set TempVar=%%T
call set TempVar=!!TempVar:template=%nomprenom%!!
echo !TempVar! >> %FichierDeSortie%
)

)

Endlocal
Commenter la réponse de yaphilde
barnabe0057 11656 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 9 janv. 2017 à 12:12
0
Utile
J'ai la solution, je l'ai testé cette fois-ci :

@echo off

set FichierATraiter=c:\DroitsUsager\ACL.txt
set FichierDeSortie=c:\DroitsUsager\ACLFull.txt
set usager=c:\DroitsUsager\Usager.txt

Setlocal enableextensions enabledelayedexpansion

for /f "tokens=* delims=" %%A in (%usager%) do (
set nomprenom=%%A

for /f "tokens=* delims=" %%T in (%FichierATraiter%) do (
set ligne=%%T
call set TempVar=%%ligne:template=!nomprenom!%%
echo !TempVar! >> %FichierDeSortie%
)
echo. >> %FichierDeSortie%
)
Endlocal
Commenter la réponse de barnabe0057
yaphilde 20 Messages postés lundi 9 janvier 2017Date d'inscription 4 décembre 2017 Dernière intervention - 9 janv. 2017 à 12:12
0
Utile
C'est bon ca fonctionne
j'ai modifié la ligne

call set TempVar=!!TempVar:template=%nomprenom%!!


en

call set TempVar=!!TempVar:template=%%A!!


Voici le code final:
@echo Off
Setlocal enableextensions enabledelayedexpansion

set FichierATraiter=c:\DroitsUsager\ACL.txt
set FichierDeSortie=c:\DroitsUsager\ACLFull.txt

set usager=c:\DroitsUsager\Usagers.txt

for /f "usebackq delims=*" %%A in ("%usager%") do (
set nomprenom=%%A
echo %%A

for /f "usebackq delims=*" %%T in ("%FichierATraiter%") do (
Set TempVar=%%T
echo %%T
call set TempVar=!!TempVar:template=%%A!!
echo !TempVar! >> %FichierDeSortie%
)

)

Endlocal


Nous venons de créer un publipostage en batch ^^

Merci pour tout
@++
Commenter la réponse de yaphilde
yaphilde 20 Messages postés lundi 9 janvier 2017Date d'inscription 4 décembre 2017 Dernière intervention - 9 janv. 2017 à 12:18
0
Utile
1
Nos tests se sont croisés.
En tout cas un grand merci Barnabe.

@++
barnabe0057 11656 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 9 janv. 2017 à 13:10
De rien ;)

Bonne journée à bientôt peut-être.
Commenter la réponse de yaphilde