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

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 109
    Points : 63
    Points
    63
    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 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 183
    Points : 5 754
    Points
    5 754
    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 du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 109
    Points : 63
    Points
    63
    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 : 426
Taille : 307,3 Ko

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 183
    Points : 5 754
    Points
    5 754
    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 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 183
    Points : 5 754
    Points
    5 754
    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 du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 109
    Points : 63
    Points
    63
    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 ?

  7. #7
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 183
    Points : 5 754
    Points
    5 754
    Par défaut
    J'ai pris "DP2 tiers 6"
    Aucun problème avec ces 2 codes (j'ai légèrement modifié le deuxième)

    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"
    }

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

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 109
    Points : 63
    Points
    63
    Par défaut
    J'ai re-récupérer tous les fichiers originaux du DP2 pour refaire des tests (je les conserve pour continuer les débuguages).

    Effectivement, les 2 codes fonctionnent bien si je les effectue seulement sur le contenu du dossier 'tier 6' déplacé dans un dossier 'DP2 test'. En revanche, aucun des 2 ne fonctionne si je les effectue sur plus de fichiers (et j'ai les preuves ).

    J'ai effectué le premier sur le contenu de 'tier 1' à 'tier 6' regroupé dans un seul dossier (on voit bien dans la console qu'il repasse sur des fichiers déjà raccourcis).
    Ce screenshot montre les résultats :
    Nom : Screenshot_2.jpg
Affichages : 352
Taille : 402,8 Ko

    J'ai effectué le deuxième sur le contenu de 'tier 1' à 'tier 3' regroupé dans un seul dossier.
    Ce screenshot montre les résultats :
    Nom : Screenshot_3.jpg
Affichages : 432
Taille : 195,0 Ko

    Mais pourquoi ça bugue !?!?! Une solution ???

    PS : c'est quoi la balise de mise en forme du forum pour le code powershell ?

  9. #9
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 183
    Points : 5 754
    Points
    5 754
    Par défaut
    Je ne vois pas de bugue.
    Le script raccourci le nom des dossiers en enlevant les 4 premiers caractères.

    Si tu le lance 2 fois ça raccourcira 2 fois donc des 4 premiers caractères puis des 4 nouveaux premiers caractères.

  10. #10
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 183
    Points : 5 754
    Points
    5 754
    Par défaut
    Nous pouvons ajouter une condition pour ne prendre que les noms de dossiers qui correspondent à un certain motif de recherche

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Get-ChildItem | Where-Object {$_.PSIsContainer} | Where-Object{$_.Name -match "^.\.. .*$"} | 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"
    }

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem | Where-Object {$_.PSIsContainer} | Where-Object{$_.Name -match "^.\.. .*$"} | Rename-Item -Path {$_.FullName} -NewName {$_.Name.substring(4, $_.Name.length-4)}

    "^.\.. .*$" -> un permier caractère, suivi d'un point, suivi d'un caractère, suivi d'un espace

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 109
    Points : 63
    Points
    63
    Par défaut
    Mais je ne lance pas la commande 2 fois de suite !!!
    On peut le voir sur le dernier screenshot.

    Du coup, si ça doublait tout, pour enlever 'n' caractères, je pourrais lancer la commande pour 'n/2' ?!?
    Sauf que, comme on pouvait le voir sur le tout premier screenshot que j'avais posté, certains sous dossiers sont raccourcis une seule fois (par exemple "Animals As Leaders", "August Burns Red", "Dream Theater", "In This Moment"...) tandis que d'autres sont raccourcis deux fois (quasiment tous les autres) lors de l'exécution de la même ligne de commande.
    Ça me rend fou !!!

    En ce qui concerne l'ajout d'une condition, je ne vois pas comment je pourrais l'utiliser car les caractères à tester sont tous différents d'un sous dossier à l'autre.

  12. #12
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 183
    Points : 5 754
    Points
    5 754
    Par défaut
    J'ai effectué le premier sur le contenu de 'tier 1' à 'tier 6' regroupé dans un seul dossier (on voit bien dans la console qu'il repasse sur des fichiers déjà raccourcis).
    Les fichiers ne sont plus conforme au modèle si il était déjà raccourcis avant le script

    On peut le voir sur le dernier screenshot.
    Je n'ai pas vu l'état des dossiers avant et après ta ligne de commande, je ne peux rien constater
    Ce que je constate c'est que je n'ai pas de problème chez moi.

    En ce qui concerne l'ajout d'une condition, je ne vois pas comment je pourrais l'utiliser car les caractères à tester sont tous différents d'un sous dossier à l'autre.
    Il suffit de trouver une trame commune (voir msg du 11/08/2020 à 11h35 : ^.\.. .*$ -> un premier caractère, suivi d'un point, suivi d'un caractère, suivi d'un espace)


    Je vais essayer de regrouper tier 1 à 6 pour tenter de constater l'anomalie

  13. #13
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 183
    Points : 5 754
    Points
    5 754
    Par défaut
    Voici mon test je ne constate aucun problème

    Avant le script
    Nom : avant.jpg
Affichages : 370
Taille : 70,9 Ko

    Ma ligne de commande
    Nom : pendant.jpg
Affichages : 395
Taille : 160,8 Ko

    Après le script
    Nom : apres.jpg
Affichages : 369
Taille : 63,0 Ko

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 109
    Points : 63
    Points
    63
    Par défaut
    Fais-moi confiance, je ne suis pas ici pour faire perdre son temps ni à celui qui essaie de m'aider ni à moi-même !!!

    Je n'exécute pas deux fois le même script : je n'exécute le script qu'une seule fois sur des dossiers qui n'ont pas déjà été raccourcis.
    Le tout premier screenshot permet de constater que tous les dossiers ont été modifiés (renommés) à la même heure et que certains n'ont pas été modifiés deux fois alors que la plupart l'ont été. La console pourrait laisser croire qu'il y a eu deux exécutions mais, entre l'exécution des deux lignes de commande, j'ai vidé mon dossier à la main pour le re-remplir avec les dossiers originaux.

    Pour ton dernier script, il marche très bien chez toi. Je vais essayer ce dernier script dans la matinée avec le test et la condition basée sur une trame commune (Where-Object{$_.Name -match "^.\.. .*$"}) qui évite forcément un double passage.

    edit : j'ai essayé les deux scripts avec le '-match' sur les 'tier' 1 à 6 regroupés et ils fonctionnent très bien tous les deux .
    Du coup, même si je n'ai pas compris pourquoi ça buguait avant (cf. PS1), j'ai maintenant une solution propre qui fonctionne.
    Il me reste plus qu'à comprendre comment construire la condition pour l'adapter à d'autres configurations...
    et puis aussi les réponses au PS2 et au PS3 de ce message.


    "^.\.. .*$" -> un permier caractère, suivi d'un point, suivi d'un caractère, suivi d'un espace
    J'essaie de comprendre :
    "^." = caractère ?
    "\." = point ?
    ".." = caractère ? (pourquoi différent de "^.)
    " ." = espace ?
    "*$" = ???

    Est-ce que tu peux me dire où je peux trouver les infos ou m'expliquer les bases de ce code de condition que je ne comprends pas ?
    Même si je ne suis pas capable d'écrire un tel script, j'aimerais pouvoir construire moi-même mes conditions à partir de ton script pour l'adapter à un maximum de configurations.

    PS1 : essaie un des scripts sans le test 'Where-Object{$_.Name -match "^.\.. .*$"}' pour les 'tier' 1 à 6 regroupés. Pourquoi ça bugue chez moi ? Est-ce que ça bugue chez toi (je crois que tu n'as pas testé) ?
    PS2 : quelle-est la balise du forum pour la mise en forme du code powershell ?
    PS3 : et pour gérer le problème des couper/coller multiples (regroupement de tous les sous dossiers des 'tier') de manière automatisée grâce à un script ?

  15. #15
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 183
    Points : 5 754
    Points
    5 754
    Par défaut
    Ce sont des expressions régulières ou aussi appeler regexp ou regex

    Voici une aide : https://docs.microsoft.com/fr-fr/dot...uick-reference

    $_.Name -match "^.\.. .*$" = On vérifie si une chaine de caractère (le nom ici) correspond à notre modèle de regexp (aussi appeler pattern)
    "^" = début de la chaine
    "." = un caractère
    "\." = un point. Obliger de l’échapper avec \ sinon il serait considéré comme un caractère
    "." = un caractère
    " " = un espace
    ".*" = un caractère, 0 ou plusieurs fois
    "$" = fin de la chaine

    Balise code : https://club.developpez.com/aidenouv...es/Balises.gif

    PS3 : et pour gérer le problème des couper/coller multiples (regroupement de tous les sous dossiers des 'tier') de manière automatisée grâce à un script ?
    As tu vraiment besoin de le faire ? Pour mes tests j'ai décompressé les archives directement dans le dossier plutôt que dans un sous-dossier, tu coup tu n'a plus besoin de les déplacer.
    Tu peux utiliser 7-zip qui décompressera toutes tes archives d'un coup

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 109
    Points : 63
    Points
    63
    Par défaut
    Merci beaucoup pour les explications concernant les 'regexp' et le lien aide mémoire. Je pense que je vais pouvoir faire les prochaines conditions tout seul.

    Enfin, pour le problème des couper/coller multiples (regroupement de tous les sous dossiers des 'tier') de manière automatisée grâce à un script, j'en ai vraiment besoin. J'avais tout téléchargé avec Jdownloader qui m'a fait les extractions automatiques donc je n'ai plus les archives originales et il y a un peu plus de 10 Go de dossiers. Ça doit être assez basique comme script ?

    Concernant la balise de code PowerShell, je n'ai pas bien compris : [CODE=PowerShell] ne marche pas. Quelle est donc cette balise ?
    Sinon, maintenant, je ne peux plus modifier mon premier message, pourquoi ?

  17. #17
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 183
    Points : 5 754
    Points
    5 754
    Par défaut
    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
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $dossier = "C:\MonDossierDP2"
    Get-ChildItem -Path "$dossier\*\*" -Directory | Move-Item -Destination {$_.Parent.Parent.FullName}

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 109
    Points : 63
    Points
    63
    Par défaut
    Encore merci. On y est presque !
    Ton code déplace tous les sous dossiers comme je le souhaitais.
    Mais je viens de réaliser qu'il faudrait aussi qu'il déplace tous les fichiers.

    Est-ce qu'il est possible de déplacer tous les sous dossiers et tous les fichiers dans le même script ? Peut-être avec un Move-File ou un truc dans le genre ?

  19. #19
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 183
    Points : 5 754
    Points
    5 754
    Par défaut
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $dossier = "C:\MonDossierDP2"
     
    (Get-ChildItem -Path "$dossier\*\*" -File) | Move-Item -Destination {$_.Directory.Parent.FullName}
    (Get-ChildItem -Path "$dossier\*\*" -Directory) | Move-Item -Destination {$_.Parent.Parent.FullName}

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $dossier = "C:\MonDossierDP2"
    (Get-ChildItem -Path "$dossier\*\*") | Move-Item -Destination {"$dossier\$($_.Name)"}

  20. #20
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 183
    Points : 5 754
    Points
    5 754
    Par défaut
    Une autre approche est d'utiliser la méthode MoveTo commun aux deux objets (File et Directory)
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $dossier = "C:\MonDossierDP2"
    (Get-ChildItem -Path "$dossier\*\*") | ForEach-Object {$_.MoveTo("$dossier\$($_.Name)")}

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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