Question
Remplacer texte entre 2 valeurs
- Kreg0
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 6
- Remerciements reçus 0
Question basique que je n'arrive pas à résoudre
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
[code:1]
$s='\DefaultPrinter\PRINTERNAME\PrinterConf\'
$r='^\\(?<un>.*?)\\(?<deux>.*?)\\(?<trois>.*?)\\$'
$s -match $r;$matches
$s -Replace $r,'${un}\NouveauNom\${deux}'
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
- Messages : 968
- Remerciements reçus 0
Laurent Dardenne écrit:
Une solution :
[code:1]
$s='\DefaultPrinter\PRINTERNAME\PrinterConf\'
$r='^\\(?<un>.*?)\\(?<deux>.*?)\\(?<trois>.*?)\\$'
$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]
\" Pair programming inside\"
@ +
Matthew<br><br>Message édité par: Matthew BETTON, à: 11/01/13 13:26
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Bien vu
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Kreg0
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 6
- Remerciements reçus 0
Une solution :
[code:1]
$s='\DefaultPrinter\PRINTERNAME\PrinterConf\'
$r='^\\(?<un>.*?)\\(?<deux>.*?)\\(?<trois>.*?)\\$'
$s -match $r;$matches
$s -Replace $r,'${un}\NouveauNom\${deux}'
[/code:1]
Merci a toi, en effet cela me semble plus sympa
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Une solution :Comment je peux intégrer $Printer dans $s -Replace ?
[code:1]
$nouveaunom=\"HP450\"
$s -Replace $r,\"`${un}\$NouveauNom\`${trois}\"
[/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.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Remplacer texte entre 2 valeurs