none
Remplacer un chemin et mettre guillemet RRS feed

  • Question

  • Bonjour,

    J'ai un tout petit problème avec mon script qui est le suivant:

    $files = Get-ChildItem -Path "D:\Data\se-k-totoTools\Batch\FFFFILE\test*.txt" -Recurse 
    foreach ($file in $files){
    $find = 'D:\Data\se-k-totoTools\totoTrust\FOF\FFFFILE.exe' | convert-string
    $replace ='"D:\Data\se-k-totoTools\totoTrust\FOF 5.6\FFFFILE.exe"' 
    $content = Get-Content $($file.FullName) -Raw
    #write replaced content back to the file
    $content -replace $find,$replace | Out-File $($file.FullName) 
    }
     

    Je n'arrive pas à appliquer les double quotes sur mon chemin.

    J'ai ceci comme erreur.

    The regular expression pattern D:\Data\se-k-totoTools\totoTrust\FOF\FFFFILE.exe is not valid.

    At C:\Users\toto\Documents\Replace.ps1:7 char:1

    + $content -replace $find,$replace | Out-File $($file.FullName)

    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        + CategoryInfo          : InvalidOperation: (D:\Data\se-k-to...FOF\FFFFILE.exe:String) [], RuntimeException

        + FullyQualifiedErrorId : InvalidRegularExpression

    Pouvez-vous m'aider SVP.

    Merci d'avance /°

    jeudi 20 août 2020 09:45

Toutes les réponses

  • salut,

    enlèves les double guillemet dans replace


    Dakhama Mehdi : Windwos developper https://github.com/dakhama-mehdi

    jeudi 20 août 2020 10:15
  • Bonjour,

    Je fais comment? Justement il me faut les doublez guillemet car il y a un espace dans le nom de mon dossier qui est FOF 5.6. Sans cela mon chemin n'est pas reconnu

    jeudi 20 août 2020 12:02
  • bonjour Atlante21

    dans ton replace, tu as une simple quote suivi d'une double quote. Les double quotes ne sont pas nécessaires dans ton cas. Pourquoi ? Tu n'a pas de variable à interpréter dans ton path.

    $var = "voiture"
    # Utilisation de double quotes
    Write-host "ceci est une $var" -ForegroundColor Green
    #Utilisation de quotes simples
    write-host 'ceci est une $var' -ForegroundColor Green
    ceci est une voiture
    ceci est une $var


    comme tu peux le constater, les simples et double quotes ont le même comportement vis à vis des espaces dans la chaîne (string) à traiter. Cependant les simple quotes n'interprètent pas les variables, s'il y en a dans ta chaîne. Dans ton cas, tu n'as pas de variable à interpreter dans ta chaine et si je fais : 

    $replace ='"D:\Data\se-k-totoTools\totoTrust\FOF 5.6\FFFFILE.exe"' 
    
    $replace
    "D:\Data\se-k-totoTools\totoTrust\FOF 5.6\FFFFILE.exe"

    en revanche, il est possible que dans ta ligne avec $content, tu doivent mettre quelque chose comme ceci :

    $content -replace $find,"$replace" | Out-File $($file.FullName) 
    afin que les espaces (blancs) soient bien interprété. Peux tu tester cela et nous faire un retour ?

    Je sais combien cela peut-être galère avec des blancs dans les noms de fichiers ou dans les Paths. C'est pourquoi je fais toujours de mon côté le nécessaire pour ne pas en avoir (usage du Pascal Case, ou de l'Underscore Case). Ainsi j'ai la lisibilité, mais pas les emmerd...

    Ceci ne m'empêche pas d'être confronté au même pb que toi, quand des utilisateurs ou des amdins ne s'y conforment pas.

    cordialement

    Olivier

    vendredi 21 août 2020 07:18
  • Salut Olivier,

    Je pense qu'il est dans un test avec toto toto tata .....

    Les gens même quand ils testent ils respectent pas les bonnes pratiques, et cela n'aboutit à rien


    Dakhama Mehdi : Windwos developper https://github.com/dakhama-mehdi

    vendredi 21 août 2020 08:32
  • Merci de vos réponses. J'ai changé le nom de dossier. l'idée de ce nom était pas le mien. Effectivement la best practice est de faire comme vous avez dit.
    mardi 8 septembre 2020 15:43
  • Bonsoir

    Outre l'utilisation des guillemets, qu'il est inutile de doubler ou mettre en guillemet simple, tu as surtout une erreur dans la recherche faite par -Replace

    Replace attend une expression régulière comme argument, et ta string replace:

    D:\Data\se-k-totoTools\totoTrust\FOF 5.6\FFFFILE.exe

    n'est pas une expression régulière valide, car le backslash dans une E.R est le caractère d’échappement.
    Le point lui remplace n'importe quel caractère.

    Ton string -replace devrait être comme ceci:

    D:\\Data\\se-k-totoTools\\totoTrust\\FOF 5\.6\\FFFFILE\.exe
    B.

    mardi 15 septembre 2020 19:50