IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Incompréhension de ".replace" [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut Incompréhension de ".replace"
    Bonjour,

    Ca fait des heures que ce traitement tout simple ne fonctionne pas, et je ne comprends pas pourquoi.
    L'objectif étant de construire une commande "COPY" pour les fichiers rencontrés (et vu où j'en suis, ça irait plus vite à la main )

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $RepertoireSource="N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\"
    $AliasSP="P:\"
    $NewFiles = Get-ChildItem -Path '.\versSP\' -Recurse -File
    foreach ($NewFic in $NewFiles) {
    #	Write-Host "$($NewFic.Name) ** $($NewFic.FullName)"
    	$Fichier="$($NewFic.FullName)"
    	Write-Host 'Source: ',$Fichier
    	$FichierCible=$Fichier
    	$FichierCible.replace($RepertoireSource,$AliasSP)
    	Write-Host '>',$FichierCible
    }
    "N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\monfichier.txt".replace($RepertoireSource,$AliasSP)
    Write-Host -NoNewLine 'Press any key to continue...';
    $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown');

    Je suis en plein désarroi car le ".replace" ne fonctionne pas dans la boucle (mais je dois mal l'utiliser)

    Voilà ce qui s'affiche :
    Source: N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\fic.txt
    N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\fic.txt
    > N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\fic.txt
    Source: N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\index.aspx
    N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\index.aspx
    > N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\index.aspx
    Source: N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\files\bpmnElements\01a851bb-a7ca-45f7-9ad7-5551c44075eb.png
    N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\files\bpmnElements\01a851bb-a7ca-45f7-9ad7-5551c44075eb.png
    > N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\files\bpmnElements\01a851bb-a7ca-45f7-9ad7-5551c44075eb.png
    Source: N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\files\bpmnElements\0f8acec3-36a8-4f40-aa9f-d94b73740fd9.png
    N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\files\bpmnElements\0f8acec3-36a8-4f40-aa9f-d94b73740fd9.png
    > N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\files\bpmnElements\0f8acec3-36a8-4f40-aa9f-d94b73740fd9.png
    Source: N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\files\diagrams\1__Gerer_les_achats.png
    N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\files\diagrams\1__Gerer_les_achats.png
    > N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\files\diagrams\1__Gerer_les_achats.png
    Source: N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\files\diagrams\2__Gerer_la_commande.png
    N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\files\diagrams\2__Gerer_la_commande.png
    > N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\files\diagrams\2__Gerer_la_commande.png
    Source: N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\libs\js\json\configuration.json.js
    N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\libs\js\json\configuration.json.js
    > N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\libs\js\json\configuration.json.js
    P:\monfichier.txt
    Press any key to continue...
    Toute aide est la bienvenue pour le débutant ps que je suis.

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    A vu de nez je dirais que le .replace renvoi une nouvelle chaîne et ne fait pas de remplacement "inplace".
    Il faut donc stocker le résultat dans ta variable.

    Attention la méthode .replace de string est sensible à la casse contrairement à l'opérateur powershell -replace qui fait d'ailleurs bien plus puisqu'il se base sur les expressions régulières. Mais on peux l'utiliser simplement.

    Un autre truc me chiffonne mais essaie déjà cela

    Voir :


    https://docs.microsoft.com/fr-fr/pow...ement-operator

  3. #3
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    Bonjour et merci pour ta réponse.

    Citation Envoyé par ericlm128 Voir le message
    A vu de nez je dirais que le .replace renvoi une nouvelle chaîne et ne fait pas de remplacement "inplace".
    Pourtant, il me semble que ça fonctionne pour la ligne 12 de mon code?

    Concernant l'opérateur -replace, mes essais initiaux se heurtent à la façon dont le répertoire est défini (et je n'ai pas la main là-dessus): espaces, caractères accentués et les "\" qui posent d'autres problèmes notamment en lien avec les regex. C'est ce qui m'a amené vers la méthode...

    Je continue à creuser.

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    J'ai fait un test simple sans rencontrer de problème.
    Si tu peux tester pour voir si le remplacent se fait correctement.

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $RepertoireSource = "N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\versSP\"
    $AliasSP = "P:\"
     
    $NewFiles = Get-ChildItem -Path $RepertoireSource -Recurse -File
    foreach ($NewFic in $NewFiles)
    {
        $src = $NewFic.FullName
        $dst = $src.Replace($RepertoireSource, $AliasSP)
     
        Write-Host "Source : $src"
        Write-Host "Destination : $dst"
        Write-Host ""
    }

  5. #5
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    Bonjour, et merci pour ta réponse

    En exécutant le code fourni, voici le résultat:
    Citation Envoyé par Log
    Get-ChildItem : Impossible de trouver le chemin d'accès «N:\Excellence Opérationnelle\02_Partage\Optimisation des
    Processus\01-CartoSUIT-généré\v», car il n'existe pas.
    Au caractère N:\Excellence Opérationnelle\02_Partage\Optimisation des Processus\01-CartoSUIT-généré\testDirNEW.ps1:4 :
    13
    + $NewFiles = Get-ChildItem -Path $RepertoireSource -Recurse -File
    +             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : ObjectNotFound: (N:\Excellence O...UIT-généré\v:String) [Get-ChildItem], ItemNotFound
       Exception
        + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
    
    Press any key to continue...
    Je note que les caractères accentués sont restitués modifiés, mais sans savoir si c'est dû à l'affichage de la console.
    Commentaire similaire concernant le message qui tronque le nom du répertoire, peut-être une limite de la routine d'erreur?
    Du coup, je ne sais pas trop l'origine de l'erreur : présence de é dans la chaine utilisée ou troncature ?
    J'ai crû un moment que les derniers caractères "sortaient" de la string (dont la longueur aurait été définie lors de l'affectation initiale à la ligne #1) à mesure que les "é" étaient remplacés par "é", mais ça ne tient pas : 4 "é" et 5 caractères perdus (ersSP)!

    Du coup le fait que tu ne rencontres pas ces problèmes me fait désespérer un peu plus

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Ton fichier à un problème d'encodage.

    Recrée le fichier.

    - Clique droit sur le dossier cible dans l'explorateur -> Nouveau -> Document texte -> Nomme le "test.ps1" (par exemple)
    - Clique droit sur le fichier -> Modifier
    - Copie-colle le code à partir du site dans l'éditeur ISE de PowerShell
    - Enregistrer

    Tu peux lancer le script directement dans ISE si tu veux aussi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. remplacement de doubles quotes avec replace
    Par christophew67 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/08/2012, 23h29
  2. Fonction Replace pour quote
    Par piero53 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 17/11/2009, 01h19
  3. Quote dans une requete...
    Par Isildur dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/06/2006, 10h57
  4. VARCHAR contenant une quote '
    Par tonyskn dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/05/2003, 19h21
  5. Quotes dans TFilenameEdit (RXLib)
    Par AnnSo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 23/01/2003, 20h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo