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 :

Optimisation script renommage par Lot (via CSV) [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 25
    Points : 13
    Points
    13
    Par défaut Optimisation script renommage par Lot (via CSV)
    Bonjour,

    Je cherche à optimiser ce script afin que le renommage soit plus rapide de mes fichiers, en effet ce script permet via un fichier csv de référence comportant : newname;oldname .
    Ma problématique c'est que mon script actuel doit renommer 24 000 fichiers. Actuellement mon script powershell le fait en 1H alors que mon script en batch le fait en 2minutes

    Voici le script powershell :

    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
    15
    16
    17
     
    $csv    = Import-Csv "E:\file.txt" -Delimiter ";" -Encoding UTF8
     
    # location of your files
    $files = get-childitem "E:\PHOTOS"
     
     
    foreach($item in $CSV){
        foreach($file in $files){
            if($item.oldname -eq "$($file.basename)$($file.extension)" -and
            ($item.newname.Length -igt 0)
            )
            {
                rename-item $file.fullname -NewName "$($item.newname)$($file.extension)" -Verbose
            }
        }
    }

    Merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Pourrions nous avoir un exemple de ton file.txt

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    J'ai supposé que ton file.txt est comme ceci

    oldname;newname
    000;A000
    003;A003
    Je ferais donc comme ça :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $dossier = "E:\PHOTOS\"
    $csvfile = "E:\file.txt"
     
    $csv = Import-Csv $csvfile -Delimiter ";" -Encoding UTF8
    $files = Get-ChildItem -Path $dossier -File
     
    foreach($item in $CSV)
    {
        $files | Where-Object {$_.BaseName -eq $item.oldname} | ForEach-Object {$_ | Rename-Item -NewName $($item.newname + $_.Extension)}
    }

  4. #4
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    mon file.txt est comme ceci

    photo;id
    000.jpg;A000
    003.jpg;A003
    ;A002
    ;A006
    009.jpg;A

    j'ai en effet des nom de photo (.jpg) qui n'existe pas car il n'y a pas de rattachement avec l'ID

    J'ai testé ton script mais toujours aussi long

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $dossier = "E:\PHOTOS"
    $csvfile = "E:\listid.txt"
     
    $csv = Import-Csv $csvfile -Delimiter ";" -Encoding UTF8 | Where-Object {$_.PHOTO.Length -igt 0}
    $files = Get-ChildItem -Path $dossier -File
     
     foreach($item in $CSV)
    {
        $files | Where-Object {($_.BaseName + $_.Extension) -eq $item.PHOTO} | ForEach-Object {$_ | Rename-Item -NewName $($item.ID + $_.Extension)}
    }

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Je ne comprend pas ton fichier file.txt

    D'après ton script il doit y avoir une colonne oldname et une newname
    C'est quoi cette notion d'ID ?
    Comment ce fichier doit être interprété ?

    Essaie de faire du pas à pas pour voir ou le temps est consommé.

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par ericlm128 Voir le message
    Essaie de faire du pas à pas pour voir ou le temps est consommé.
    La boucle imbriquée peut être, essayez avec une collection System.Collections.Generic.HashSet qui peut renvoyer la liste des différences en une 'passe'.
    Et pour Rename-item qq chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     PIPELINE | Rename-Item -NewName {$($item.ID + $_.Extension)}
    A tester.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Merci pour votre aide.

    Pou réexpliquer je reçois chaque jour un listing comportant des ID qui fait référence à une photo (certains ID n'ont pas de photo de référence car elle n'est pas encore créer) ce listing en txt ressemble à cela :

    ##LISTING E:\listing.txt
    soit :
    ID;PHOTO
    001;5481818.jpg
    002;4882818.jpg
    003;5484848.jpg
    004;
    005;8484515.jpg
    006;
    007;
    008;65155151.jpg

    ainsi de suite jusqu'à 24 000 lignes

    Je dois donc pour un import dans un autre logiciel renommé toutes ses photos en remplacement leur nom par 00*.jpg

    Je vous remercie de m'avoir aider et après recherche voilà la solution si cela intéresse :

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sourcetemp = "E:\photos"
    Import-Csv "E:\listing.txt" -Delimiter ";" -Encoding UTF8 | Where-Object {$_.PHOTO.Length -igt 0} | Foreach {
        $oldFull = "$sourcetemp\$($_.photo)"
        $newFull = "$sourcetemp\$($_.id)"
        If ( Test-Path $oldFull ) {
            rename-Item -Path $oldFull -NewName ($newFull + ".JPG")
        }
    }

  8. #8
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Tu peux passer la discutions en résolu si c'est terminé.

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

Discussions similaires

  1. [Batch] Renommer des fichiers par lot
    Par mikeduff dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 05/05/2020, 12h30
  2. [Batch] Renommer des Fichiers 8 par 8 avec une suite fixe de lettres
    Par Selecta34 dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 20/10/2017, 10h46
  3. Renommer des dossiers par lots
    Par rambc dans le forum AppleScript
    Réponses: 12
    Dernier message: 18/04/2010, 13h27
  4. Déplacer et renommer des fichier CSV
    Par smain_inf dans le forum VBScript
    Réponses: 5
    Dernier message: 25/02/2010, 18h54
  5. [FPDF] renommer des PDF par lot selon leurs contenus
    Par Gabor3D dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 06/01/2008, 12h55

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