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 :

Racourcir et renommer le nom de multiples sous dossiers [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 109
    Par défaut Racourcir et renommer le nom de multiples sous dossiers
    Bonjour

    Je précise que je suis novice en PowerShell et que je n'y comprends pas grand chose... Voici mon problème :

    J'ai un dossier contenant des dizaines de sous dossiers dont les noms ont cette forme : 'préfixe inutile' + 'nom à garder'
    Voici deux exemples de noms :
    9.1 Rush - Anthem
    9.2 Iron Maiden - El Dorado


    J'aimerais modifier automatiquement tous ces noms de sous dossiers pour les transformer en : 'nom à garder'
    Ça donnerait sur mes deux exemples :
    Rush - Anthem
    Iron Maiden - El Dorado


    Pour ce faire, j'utilise cette ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dir | rename-item -NewName {$_.name.substring(4,$_.BaseName.length-4)}
    Elle fonctionne parfaitement sur certains sous dossiers ou bugue complètement sur d'autres. Je n'arrive pas à comprendre pourquoi sur certains des sous dossiers (pas tous), la commande est exécutée 2 fois et je perds donc 4 caractères (de trop) que je voulais garder.
    Le bugue donnerait sur mes deux exemples :
    - Anthem
    Maiden - El Dorado

    Mais pourquoi donc ? Comment y remédier ?


    Ensuite, J'aimerais ajouter un préfixe : 'préfixe utile' + 'nom à garder' = 'nouveau nom à garder'
    Ça donnerait sur mes deux exemples :
    DH2 Rush - Anthem
    DH2 Iron Maiden - El Dorado


    Pour ce faire, j'utilise cette ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dir | rename-item -NewName {"DH2 " + $_.name}
    Comme précédemment, elle fonctionne parfaitement sur certains sous dossiers ou bugue complètement sur d'autres. Je n'arrive pas à comprendre pourquoi sur certains des sous dossiers (pas tous), la commande est exécutée 2,3, jusqu'à plus de 10 fois et je retrouve le préfixe ajouté plusieurs fois en conséquence.
    Le bugue donnerait sur mes deux exemples :
    DH2 DH2 DH2 Rush - Anthem
    DH2 DH2 DH2 DH2 DH2 Iron Maiden - El Dorado

    Mais pourquoi donc ? Comment y remédier ?

    Pour rattraper le coup, je bidouille, j’utilise alors cette ligne de commande (qui ne bugue jamais jusqu'à présent) autant de fois que nécessaire pour supprimer les préfixes répétés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dir | rename-item -NewName {$_.name -replace "DH2 DH2 ","DH2 "}
    Ça va toujours plus vite que tout faire à la main...

    Pour conclure :
    - pour supprimer les 'préfixe inutile', je n'y arrive pas (GRRRR)
    - pour ajouter le 'préfixe utile', je contourne le problème en bidouillant.

    J'ai l'impression que mon erreur est la source des deux problèmes mais je ne comprends pas où elle est. A l'aide !!! Comment faire ???

  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
    Essai comme ceci
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    dir | rename-item -NewName ($_.name.substring(4,$_.BaseName.length-4))

    Ou au pire comme cela
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem | Where-Object {$_.PSIsContainer} | ForEach-Object {Rename-Item -Path $_.FullName -NewName ($_.name.substring(4,$_.BaseName.length-4))}

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 109
    Par défaut
    Merci pour vos suggestions.

    La première en remplaçant les accolades par des parenthèses ne fonctionne pas du tout : "impossible d'appeler une méthode dans une expression Null".

    La deuxième (que je ne comprends pas) bugue exactement comme celle que j'utilisais avant.

    Ce screenshot montre les résultats :
    Nom : Screenshot_1.jpg
Affichages : 716
Taille : 307,3 Ko

  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
    La première en remplaçant les accolades par des parenthèses ne fonctionne pas du tout : "impossible d'appeler une méthode dans une expression Null".
    Oui c'est ma faute


    Étrange, que nous dit PS avec un WhatIf (utilisons aussi le même champs Name)
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem | Where-Object {$_.PSIsContainer} | ForEach-Object {Rename-Item -Path $_.FullName -NewName ($_.Name.substring(4, $_.Name.length - 4)) -WhatIf}

    As tu des noms de dossiers qui te pose toujours le problème que j'essaie de reproduire ?

  5. #5
    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
    On peut aussi faire ceci pour voir ce qu'il se passe

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Get-ChildItem | Where-Object {$_.PSIsContainer} | ForEach-Object {
        Write-Host "Avant : $($_.FullName)"
        $after = Rename-Item -Path $_.FullName -NewName ($_.Name.substring(4, $_.Name.length-4)) -PassThru
        Write-Host "Après : $($after.FullName)`n"
    }

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 109
    Par défaut
    Je ne peux pas tester exactement sur les mêmes fichiers car j'en ai eu trop marre de ce satané bugue hier soir et j'ai renommé le DP2 à la main et j'ai supprimé les fichiers d'origine. Mais il me reste encore du DP3 au DP9 à faire et ils contiennent encore plus de sous dossiers.

    Si tu veux faire quelques essais toi même, tu trouveras les liens de téléchargements sur cette page : https://www.fretsonfire.org/forums/v...hp?f=5&t=49189 (il faut se créer un compte pour y accéder).
    Tu n'as pas besoin de tout télécharger, juste les fichiers 'tier 1', 'tier 2' et 'tier 3' devraient suffire pour des tests dans un premier temps.
    J'avais copié à la main le contenu de chaque dossier 'tier n' dans un seul dossier DP2 pour ensuite tout renommer en une seule fois.

    D'ailleurs, j'ai découvert hier soir que j'ai 22 dossiers 'tier n' dans le dossier DP3, 27 dans le DP4 et ainsi de suite. Ça va être très fastidieux de faire les couper/coller à la main pour tout regrouper à la racine du DP3 et ensuite tout renommer. Ça doit être possible (et assez basique) de l'automatiser en PowerShell ... mais ce langage est vraiment du charabia pour moi et ça va me prendre trois jours pour peut-être y arriver, ou pas.

    Il faudrait modifier cette arborescence :
    DP2
    tier 1
    sous dossier 1.1
    sous dossier 1.2
    sous dossier 1.3
    tier 2
    sous dossier 2.1
    sous dossier 2.2
    sous dossier 2.3
    tier 3
    sous dossier 3.1
    sous dossier 3.2
    sous dossier 3.3

    En cette arborescence :
    DP2
    sous dossier 1.1
    sous dossier 1.2
    sous dossier 1.3
    sous dossier 2.1
    sous dossier 2.2
    sous dossier 2.3
    sous dossier 3.1
    sous dossier 3.2
    sous dossier 3.3

    Est-ce que quelqu'un aurait une idée ?

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

Discussions similaires

  1. Renommer le nom de l'instance
    Par user_oracle dans le forum Administration
    Réponses: 8
    Dernier message: 05/05/2009, 17h48
  2. Réponses: 4
    Dernier message: 28/04/2008, 12h43
  3. Réponses: 2
    Dernier message: 09/01/2006, 14h52
  4. nom de domaine sous apache ?
    Par artotal dans le forum Apache
    Réponses: 2
    Dernier message: 31/12/2005, 21h46
  5. utilisé une chaine comme un nom de variable sous delphi ?
    Par hatem_info dans le forum Langage
    Réponses: 3
    Dernier message: 11/10/2005, 16h22

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