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 :

Script pour trouver un dossier et le renommer


Sujet :

Scripts/Batch

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Points : 1
    Points
    1
    Par défaut Script pour trouver un dossier et le renommer
    Bonjour Bonjour,

    Je suis complètement perdu. On m'a demandé de faire un Script en Powershell langage que je n'ai jamais utilisé.

    Je suis en train de me perdre dans de la documentation en tout genre et j'aimerais si possible savoir si je pars dans la bonne direction ou bien qu'elles sont les premières étapes à ne pas négliger.

    Le problème est plutôt simple.

    Je dois trouver des dossiers qui porte un certains noms dans une arborescence et les renommer par un nouveau nom.

    Exemple:

    C:\Journaux\2015
    Imprimerie
    Flash
    disquette
    C.\Journaux\2014
    Imprimerie
    Flash
    disquette

    Trouver Disquette pour remplacer par "Cd" qui donnerait :

    C:\Journaux\2015
    Imprimerie
    Flash
    Cd
    C.\Journaux\2014
    Imprimerie
    Cd
    disquette

    Voila en simplifié. Mais j'ai 200 dossiers avec des sous-dossiers où je dois changer à chaque fois un certains noms par un autre.

    J'ai aucune connaissance en powershell juste les bases du batch donc voila

    Sur le principe je dois ? :

    1. variable qui défini le chemin de l'arborescence
    2. variable qui défini le nom à trouver
    3. Boucle qui parcours toutes l'arborescence avec une condition if si le dossier s'appelle "tata"
    4. si oui changer le nom.
    5 terminé.

    C'est correct? Et je ne sais pas du tout comment l'interraction est-elle possible en powershell. Si par exemple je veux spécifier le nom à trouver et son nouveau nom c'est possible? Par fenêtre ou autre? Sans aller modifier le code la prochaine fois?

    Merci beaucoup.

    Salutations

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Points : 520
    Points
    520
    Par défaut
    Citation Envoyé par zattzatt Voir le message
    Bonjour Bonjour,

    Je suis complètement perdu. On m'a demandé de faire un Script en Powershell langage que je n'ai jamais utilisé.
    Je suis en train de me perdre dans de la documentation en tout genre et j'aimerais si possible savoir si je pars dans la bonne direction ou bien qu'elles sont les premières étapes à ne pas négliger.
    sans connaitre ton niveau informatique je te proposse une petite lecture des bases, tu a un tuto ici


    Le problème est plutôt simple.

    Trouver Disquette pour remplacer par "Cd" qui donnerait :

    C:\Journaux\2015
    Imprimerie
    Flash
    Cd
    C.\Journaux\2014
    Imprimerie
    Cd
    disquette
    Je crois qu'il y a une erreur !!! mais j'ai compris le principe


    Sur le principe je dois ? :

    1. variable qui défini le chemin de l'arborescence
    2. variable qui défini le nom à trouver
    3. Boucle qui parcours toutes l'arborescence avec une condition if si le dossier s'appelle "tata"
    4. si oui changer le nom.
    5 terminé.

    C'est correct? Et je ne sais pas du tout comment l'interraction est-elle possible en powershell. Si par exemple je veux spécifier le nom à trouver et son nouveau nom c'est possible? Par fenêtre ou autre? Sans aller modifier le code la prochaine fois?
    l'analyse est bonne et le scipt sera donc simple

    peut tu me donné ton niveau en programmation pour savoir comment t'aidée stp

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Points : 520
    Points
    520
    Par défaut
    Je te donne une solution possible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $dossierbase = "c:\temp"
    $folders = Import-Csv 'c:\renamefolders.csv' -Delimiter ";"
    
    foreach ($trouve in $folders) { 
        Get-ChildItem -path $dossierbase -Filter $trouve.oldname -Directory -Recurse | Rename-Item -NewName $trouve.newname
        }
    le dossier de base ou le script travaille ce trouve dans la variable $dossierbase
    Les noms des dossiers à renommé ce trouve dans le fichier renamefolders.csv
    le contenue du fichier resemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    oldname;newname
    toto;titi
    à toi de voir pour le faire évolué,
    en priorité pour la gestion des erreurs.
    tu ne pourra pas renommé un dossier si un utilisateur y a un fichier d'ouvert ou même seulement le dossier ouvert !



    Et je ne sais pas du tout comment l'interraction est-elle possible en powershell.
    Si par exemple je veux spécifier le nom à trouver et son nouveau nom c'est possible ?
    Par fenêtre ou autre ?
    Sans aller modifier le code la prochaine fois ?
    tout est possible
    tout dépend de ton niveau en programmation

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Tout d'abord merci d'avoir pris la peine de répondre.
    Je n'ai pas l'habitude de demander des questions si vastes. Surtout que cela fait un peu "Faîtes mon boulot merci".

    J'ai lu l'introduction du Powershell conseillé au début de ton lien, maintenant je suis en train de regarder ton lien dont le contexte est par chance pas trop loin du miens.

    Je commence à y voir plus clair et à faire quelques tests.

    Merci pour ton code, ça à l'air assez simple finalement même si je suis toujours un peu perdu.

    J'ai beaucoup développé en Java ainsi qu'en objective-c (Apple) mais j'ai plus touché de batch et de script depuis 5 ans. Voilà pourquoi je galère un peu (Syntaxe, commandes)

    Je vais essayer de faire mes tests et de voir ce que j'arrive faire et par après si j'ai une question plus précise je reviendrai la poser.

    Merci en tout cas.
    Salutations

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par 6ratgus Voir le message
    Je te donne une solution possible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $dossierbase = "c:\temp"
    $folders = Import-Csv 'c:\renamefolders.csv' -Delimiter ";"
    
    foreach ($trouve in $folders) { 
        Get-ChildItem -path $dossierbase -Filter $trouve.oldname -Directory -Recurse | Rename-Item -NewName $trouve.newname
        }
    le dossier de base ou le script travaille ce trouve dans la variable $dossierbase
    Les noms des dossiers à renommé ce trouve dans le fichier renamefolders.csv
    le contenue du fichier resemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    oldname;newname
    toto;titi
    J'ai quand même voulu tester

    J'obtiens une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Get-ChildItem : Impossible de trouver un paramètre correspondant au nom «*Directory*».
    Au niveau de U:\Powershell\Sans titre1.ps1*: 9 Caractère*: 72
    +     Get-ChildItem -path $dossierbase -Filter $trouve.oldname -Directory <<<<  -Recurse | Rename-Item -NewName $trouve.newname
        + CategoryInfo          : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException
        + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

    EDIT :

    J'ai toujours l'erreur mais ton code est-il juste?

    Je ne comprends pas trop. $trouve in $folders ? J'ai l'impression qu'il manque des choses.

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Points : 520
    Points
    520
    Par défaut
    Citation Envoyé par zattzatt Voir le message
    Tout d'abord merci d'avoir pris la peine de répondre.
    Je n'ai pas l'habitude de demander des questions si vastes. Surtout que cela fait un peu "Faîtes mon boulot merci".
    On est la pour s'entraidé !

    J'ai beaucoup développé en Java ainsi qu'en objective-c (Apple) mais j'ai plus touché de batch et de script depuis 5 ans. Voilà pourquoi je galère un peu (Syntaxe, commandes)
    Donc la programmation orienté objet ne va pas te posé de problème
    tu pourra donc évolué rapidement et faire une interface graphique

    J'obtiens une erreur :
    je suppose que tu utilise la version 2 de powershell
    si tu peut passe en version 4 disponible ici
    sinon revient ici et je te donnerais la solution

  7. #7
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Points : 520
    Points
    520
    Par défaut
    J'espère que tu test sur une arborescence de test !!

    Je ne comprends pas trop. $trouve in $folders ? J'ai l'impression qu'il manque des choses.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($trouve in $folders) {
    $trouve et $folders sont des variable.
    $folders contient la liste de nom de dossier à renommé, qui est contenue dans le fichier renamefolders.
    $trouve va contenir une ligne de ton fichier renamefolders
    c'est une boucle, donc foreach va mettre dans $trouve une ligne du tableau $folders et exécuté la commande entre accolade {}

    si tu met dans le fichier renamefolders quelques nom de dossier pour les tests,
    après avoir lu le fichier avec import-csv, si tu tape le nom de la variable puis entré, tu va avoir l'affichage suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PS C:\Users\xxx> $folders
    
    oldname                                                                                   newname                                                                                  
    -------                                                                                   -------                                                                                  
    toto                                                                                      titi 
    toto1                                                                                     titi2 
    toto2                                                                                     titi4
    un élément d'une ligne de ce tableau peut être lu de la façon suivante :
    voila pour un petit cours
    si tu veut d'autre précision n'hésite pas

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par 6ratgus Voir le message
    On est la pour s'entraidé !


    Donc la programmation orienté objet ne va pas te posé de problème
    tu pourra donc évolué rapidement et faire une interface graphique


    je suppose que tu utilise la version 2 de powershell
    si tu peut passe en version 4 disponible ici
    sinon revient ici et je te donnerais la solution

    Merci du petit cours, j'étais tout simplement mal réveillé. En relisant le code, je viens de me dire mais quel con .

    Ne t'inquiètes pas j'ai fais une arborescence de test.

    Bon je suis obligé de rester sur du powershell version 2.0. Question de compatibilité puisqu'on à plusieurs vieux serveurs.

    Me semblait que le code était trop "condensé" pour faire ça. Je vais continué à lire des infos à droite à gauche afin d'adapter en version 2.0.

    Mais merci de ta précieuse aide! C'est top!

  9. #9
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Points : 520
    Points
    520
    Par défaut
    Citation Envoyé par zattzatt Voir le message
    Bon je suis obligé de rester sur du powershell version 2.0. Question de compatibilité puisqu'on à plusieurs vieux serveurs.
    la solution est simple mais faut la connaitre :
    tu rajoute | Where {$_.PSIsContainer} dans la ligne de pipeline du get-childitem. ça filtre tous ce qui n'est pas un dossier. il aussi bien sur enlevé l'option -directory
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $dossierbase = "c:\temp"
    $folders = Import-Csv c:\renamefolders.csv -Delimiter ";"
    
    foreach ($trouve in $folders) { 
        Get-ChildItem -path $dossierbase -Filter $trouve.oldname -Recurse | Where {$_.PSIsContainer} | Rename-Item -NewName $trouve.newname
        }

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par 6ratgus Voir le message
    la solution est simple mais faut la connaitre :
    tu rajoute | Where {$_.PSIsContainer} dans la ligne de pipeline du get-childitem. ça filtre tous ce qui n'est pas un dossier. il aussi bien sur enlevé l'option -directory
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $dossierbase = "c:\temp"
    $folders = Import-Csv c:\renamefolders.csv -Delimiter ";"
    
    foreach ($trouve in $folders) { 
        Get-ChildItem -path $dossierbase -Filter $trouve.oldname -Recurse | Where {$_.PSIsContainer} | Rename-Item -NewName $trouve.newname
        }
    Merci!
    Bon j'étais pas si fatigué finalement Le bon code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $dossierbase = "U:\Powershell\Script_renommer"
    $folders = Import-Csv 'U:\Powershell\renamefolders.csv' -Delimiter ";"
    
    
    foreach ($trouve in $dossierbase) { 
        Get-ChildItem -path $dossierbase -Filter $folders.oldname -Recurse | Where {$_.PSIsContainer} | Rename-Item -NewName $folders.newname
        }
    $folders à la place de $trouve


    Enfin le code marche ! Après j'ai trop l'impression qu'il y a trop peu de code. je vais regarder maintenant un peu les vues pour pouvoir avoir la possibilité d'introduire directement les noms en lançant le script.

    Merci je te laisse un peu tranquille


    EDIT : Where {$_.PSIsContainer} ... = je comprend pas trop l'utilité .. si c'est un container? mais c'est tous des container non?

  11. #11
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Points : 520
    Points
    520
    Par défaut
    Citation Envoyé par zattzatt Voir le message
    Merci!
    de rien
    $folders à la place de $trouve
    NON pas ça !!!!

    ton script ne fonctionne plus et provoque des messages d'erreurs !!!!

    je crois que tu n'a pas compris le cours

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par 6ratgus Voir le message
    de rien

    NON pas ça !!!!

    ton script ne fonctionne plus et provoque des messages d'erreurs !!!!

    je crois que tu n'a pas compris le cours
    C'est le contraire. Avec ton script j'obtenais une erreur. Qu'il trouvais pas newname.

    En mettant "folders" j'ai plus d'erreurs et cela fonctionne très bien .

    T'es sûr de toi? Parce que dans ton code, "trouve" c'est chaque élément de l'arborescence dans la boucle.. donc tu ne peux pas filtrer avec ça. Il faut filtrer avec le nom que je recherche qui est noté dans "folders" justement.. Et le remplacer par le nouveau nom qui se trouve encore une fois dans folders.


    Pour moi c'est correct et ça fonctionne...

    J'ai loupé quelque chose ?

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Voici l'erreur avec ton script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Rename-Item : Impossible de lier l'argument au paramètre «*NewName*», car il a la valeur Null.
    Au niveau de U:\Powershell\Sans titre1.ps1*: 9 Caractère*: 121
    +      Get-ChildItem -path $dossierbase -Filter $trouve.oldname -Recurse | Where {$_.PSIsContainer} | Rename-Item -NewName <<<<  $trouve.newname
        + CategoryInfo          : InvalidData: (:) [Rename-Item], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.RenameItemCommand

    Et comme j'ai expliqué en haut, ça me paraît plus logique ce que j'ai changé. Sinon c'est que j'ai vraiment pas compris quelque chose

  14. #14
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Points : 520
    Points
    520
    Par défaut
    Citation Envoyé par zattzatt Voir le message
    Voici l'erreur avec ton script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Rename-Item : Impossible de lier l'argument au paramètre «*NewName*», car il a la valeur Null.
    +      .... | Rename-Item -NewName <<<<  $trouve.newname
    pour cette erreur, c'est qui manque quelque chose !!! une valeur dans $trouve.newname
    regarde dans ton fichier CSV. tu doit avoir en première ligne avec exactement :
    oldname;newname
    ces nom sont ceux utilisé dans le code après !
    $trouve.newname ou $_.oldname

    puis sur les lignes suivantes du fichiers tu aura les noms actuels des dossiers à renommé avec le nouveau nom sur la même ligne :
    nomdossier1;nouveaunomdossier1
    nomdossier2;nouveaunomdossier2
    nomdossier3;nouveaunomdossier3
    avec comme séparateur le point virgule, comme on le précise dans la commande suivante :
    $folders = Import-Csv 'U:\Powershell\renamefolders.csv' -Delimiter ";"

    EDIT :
    ou alors je me trompe d'erreur et le probleme ce corrige comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem -path $dossierbase -Filter $trouve.oldname -Recurse | Where {$_.PSIsContainer} | Rename-Item -NewName $($trouve.newname)

    voila pour l'erreur généré !!!

    En mettant "folders" j'ai plus d'erreurs et cela fonctionne très bien .
    tes modification ne génère pas d'erreurs mais ne fais pas le travail
    fais un test de renomage et dis moi si ça fonctionne !

    après on travaillera sur ta compréhension du script pour que tu puisse avancé

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    En modifiant ton code j'ai toujours la même erreur.

    Et oui avec mes modifications le script fonctionne parfaitement et renomme mes dossiers comme voulu

    Désolé mais explique moi alors. Parce que pour moi c'est "folders" qui contient oldname et newname... et pas "trouve" donc comment tu veux que $trouve.oldname fonctionne?

    J'ai essayé juste la fonction filtre :


    Mon fichier csv :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    oldname;newname
    bieo;bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $dossierbase = "U:\Powershell\Script_renommer"
    $folders = Import-Csv 'U:\Powershell\renamefolders.csv' -Delimiter ";"
    
    
    foreach ($trouve in $dossierbase) { 
        Get-ChildItem -path $dossierbase -Filter $trouve.oldname -Recurse  
        }
    Résultat : tous les fichiers sont listés sans prendre en compte le filtre


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $dossierbase = "U:\Powershell\Script_renommer"
    $folders = Import-Csv 'U:\Powershell\renamefolders.csv' -Delimiter ";"
    
    
    foreach ($trouve in $dossierbase) { 
        Get-ChildItem -path $dossierbase -Filter $folders.oldname -Recurse 
        }

    Résultat :

    Uniquement le seul nom de dossier avec le oldname est affiché et donc le filtre fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Répertoire*: U:\Powershell\Script_renommer\dossier_test\1
    
    
    Mode                LastWriteTime     Length Name                                                                                                                                                                                                                  
    ----                -------------     ------ ----                                                                                                                                                                                                                  
    d----        10.06.2015     14:26            bieo

  16. #16
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Points : 520
    Points
    520
    Par défaut
    Citation Envoyé par zattzatt Voir le message
    Uniquement le seul nom de dossier avec le oldname est affiché et donc le filtre fonctionne.
    peut tu faire le même test avec plusieurs nom de dossier dans le fichier CSV, stp
    le dernier test avec filtre me suffit !

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par 6ratgus Voir le message
    peut tu faire le même test avec plusieurs nom de dossier dans le fichier CSV, stp
    le dernier test avec filtre me suffit !

    Merci de ton aide.

    Mais je vais recoder le script complètement. Parce qu'il faut que j'ai un log complet des erreurs. Du fait que si un fichier est ouvert dans le dossier à renommer il y aura une erreur d'accès.

    Et je suis obligé de décomposer le script afin de savoir en tout temps quel dossier je traite afin d'utiliser un try et catch pour faire mon log.

  18. #18
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Voilà j'ai terminé mon script qui fonctionne parfaitement.

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    $Path = "U:\Powershell\Script_renommer"
    $OldText = "bieo"
    $NewText = "bien" 
    $logFile = 'u:\test.txt'
    
    
    $a = Get-Date
    "Lancement du Script de renommage : " + $a  >> $logfile
    Get-ChildItem $Path -Recurse | %{$_.FullName} |
    Sort-Object -Property Length -Descending |
    % {
        Write-Host $_
        $Item = Get-Item $_
        $PathRoot = $Item.FullName | Split-Path
        $OldName = $Item.FullName | Split-Path -Leaf
        $NewName = $OldName -replace $OldText, $NewText
        $NewPath = $PathRoot | Join-Path -ChildPath $NewName
        
        if ($OldName.Contains($OldText)) {
        
        $nameModified = Rename-Item -Path $Item.FullName -NewName $NewPath
        if (!$nameModified)
        {
          $a = Get-Date
          $erreurInfo  =  "Impossible de modifier " + $item.Fullname  + "    "+ $a
          $erreurInfo >> $logFile
        }
        
      }
        
    
    }
    
    $a = Get-Date
    "FIN : " + $a   >> $logfile

  19. #19
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Je ne comprend juste pas à quoi sert le %

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Get-ChildItem $Path -Recurse | %{$_.FullName} |
    Sort-Object -Property Length -Descending |
    % { 
    
    }
    Si je remplace le & pour foreach ou foreach -process cela fonctionne la même chose.

    Quelle est la différence ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Get-ChildItem $Path -Recurse | Foreach -process {$_.FullName} |
    Sort-Object -Property Length -Descending |
    Foreach -process {
    EDIT: % est l'alias de foreach .. mais alors le -process change quoi?

  20. #20
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Points : 520
    Points
    520
    Par défaut
    Citation Envoyé par zattzatt Voir le message
    Voilà j'ai terminé mon script qui fonctionne parfaitement.
    Attention :

    si tu a deux dossier nommé par exemple :
    "bien"
    et
    "bientot"

    ton script renomme les deux dossiers !

    dans le même esprit :
    si un fichier ce nomme comme le dossier que tu doit renommé, il sera renommé !

    à toi de faire les tests !!

    sinon tu a vite compris le codage en powershell.

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/02/2014, 11h35
  2. Script pour trouver des blocs dans un listing
    Par rambc dans le forum Général Python
    Réponses: 7
    Dernier message: 06/01/2012, 08h43
  3. Code pour trouver le dossier le plus récent
    Par trblolo dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 10/01/2009, 12h07
  4. Script pour créer un dossier
    Par trihanhcie dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 23/08/2006, 17h14

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