Question Remplacer texte entre 2 valeurs

Plus d'informations
il y a 13 ans 2 mois #13594 par Kreg0
Bonjour à tous !

Question basique que je n'arrive pas à résoudre :evil:

Je souhaiterais remplacer un texte dans un fichier compris entre 2 valeurs, exemple :
[code:1]\DefaultPrinter\PRINTERNAME\PrinterConf\[/code:1]

Je souhaiterais remplacer PRINTERNAME, sachant que cetet valeur est dynamique.
J'ai essayé le code ci-dessous qui ne fonctionne pas, -> Je récupère une erreur de type
Method invocation failed because [System.String] doesn't contain a method named 'EndWith' :

[code:1]$start = $str.StartsWith('DefaultPrinter')
$end = $str.EndWith('PrinterConf')
$length = $end - $start
$result = $str.substring($start, $length)
(Get-Content ($FilePath + \"\Printer-Reference.reg\"«»)) | Foreach-Object {$_ -replace ($result), ($Printer)} | Set-Content ($Filepath + \"\Printer-Reference.reg\"«»)[/code:1]
Sachant que $Printer récupère bien les noms de mes imprimantes.

Remplacer un mot fixe ça j'y arrive, remplacer un caractère j'y arrive, mais pas un \"mot\" compris entre 2 autres... Help :)

Merci !!<br><br>Message édité par: Kreg, à: 10/01/13 16:02

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 2 mois #13595 par Laurent Dardenne
Une solution :
[code:1]
$s='\DefaultPrinter\PRINTERNAME\PrinterConf\'
$r='^\\(?&lt;un&gt;.*?)\\(?&lt;deux&gt;.*?)\\(?&lt;trois&gt;.*?)\\$'
$s -match $r;$matches

$s -Replace $r,'${un}\NouveauNom\${deux}'
[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 2 mois #13601 par Matthew BETTON
Bonjour,

Laurent Dardenne écrit:

Une solution :
[code:1]
$s='\DefaultPrinter\PRINTERNAME\PrinterConf\'
$r='^\\(?&lt;un&gt;.*?)\\(?&lt;deux&gt;.*?)\\(?&lt;trois&gt;.*?)\\$'
$s -match $r;$matches

$s -Replace $r,'${un}\NouveauNom\${deux}'
[/code:1]


Une petite correction pour :
[code:1]
$s -Replace $r,'${un}\NouveauNom\${deux}'
[/code:1]

qui donne :

[code:1]DefaultPrinter\NouveauNom\PRINTERNAME[/code:1]

[code:1]$s -Replace $r,'${un}\NouveauNom\${trois}'[/code:1]

renverra :

[code:1]DefaultPrinter\NouveauNom\PrinterConf[/code:1]

\&quot; Pair programming inside\&quot; ;)

@ +

Matthew<br><br>Message édité par: Matthew BETTON, à: 11/01/13 13:26

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 2 mois #13602 par Laurent Dardenne
C'est plus mieux comme ça.
Bien vu :)

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 2 mois #13607 par Kreg0
Réponse de Kreg0 sur le sujet Re:Remplacer texte entre 2 valeurs
Laurent Dardenne écrit:

Une solution :
[code:1]
$s='\DefaultPrinter\PRINTERNAME\PrinterConf\'
$r='^\\(?&lt;un&gt;.*?)\\(?&lt;deux&gt;.*?)\\(?&lt;trois&gt;.*?)\\$'
$s -match $r;$matches

$s -Replace $r,'${un}\NouveauNom\${deux}'
[/code:1]



Merci a toi, en effet cela me semble plus sympa ;-) En remplacement le ${deux} par le ${trois}, déjà repéré par Matthew.

Par contre, dans mon cas, la valeur de \NouveauNom\ est variable. Provenant de $Printer
Comment je peux intégrer $Printer dans $s -Replace ?

Merci!
Kreg

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 2 mois #13609 par Laurent Dardenne
Kreg écrit:

Comment je peux intégrer $Printer dans $s -Replace ?

Une solution :
[code:1]
$nouveaunom=\&quot;HP450\&quot;
$s -Replace $r,\&quot;`${un}\$NouveauNom\`${trois}\&quot;
[/code:1]
On doit utiliser la substitution pour insérer le nom de variable et retarder la substitution des références des captures nommées, car toutes les deux utilisent le signe dollar, pas de bol.
Mais il y a peut être plus simple.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.049 secondes
Propulsé par Kunena