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 :

Renommage fichiers - incrementation [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 261
    Par défaut Renommage fichiers - incrementation
    Bonjour
    Débutant sur Powershell, je voudrais renommer de nombreux fichiers d'un dossier Voyage

    Soit plusieurs dossiers contenant des sous-dossiers contenant des images jpg ou des videos mp4

    Voyage / Paris/ Photos
    Voyage / Paris/ Videos
    Voyage / Nantes / Photos

    Les images de Voyage / Paris/ Photos sont à renommer 1.jpg 2.jpg 3.jpg etc ....
    Les images de Voyage / Nantes / Photos sont à renommer 1.jpg 2.jpg 3.jpg etc ....
    Les vidéos (si elles existent) sont à renommer 1.mp4 2.mp4 etc ....

    Avec le code ci-dessous je renomme de façon récursive mais il me faut traiter la partie incrémentation sur le nom du fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $q = dir -Recurse | Where-Object {$_.name -like "*jpg*"}
    foreach ($qs in $q)
    {
    $name = $qs.FullName
    $newname = $qs.Name
    Rename-Item $name -NewName "TEST-$newname"
    }
    Merci pour votre aide.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 261
    Par défaut
    J'ai finalement réussi )

    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
    $q = dir -Recurse | Where-Object {$_.name -like "*jpg*"}
    $temp_dir=''
    $a = 0
    foreach ($qs in $q){
    
    
    $name_dir = Split-Path -Path (Get-Location) -Leaf Write-host $name_dir Write-host $qs Write-host $temp_dir $chemin_complet = Get-ChildItem -Path $qs -Recurse | Select-Object -ExpandProperty FullName Write-host $chemin_complet $chemin_dir = Split-Path -Path $chemin_complet -Parent Write-host $chemin_dir if ($chemin_dir -ne $temp_dir) {
    $a=0 Write-host "-----------------------" Write-host "mise zero" Write-host $a Write-host "-----------------------" }
    $a = ($a + 1) Write-host $a $name = $qs.FullName Rename-Item $name -NewName "$a.jpg" $temp_dir = $chemin_dir }
    pause

  3. #3
    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
    Bravo, j'allais te venir en aide.

    Une petite note, si tu ré-exécute ton script il va de nouveau remonter les fichiers d'un dossier

    Je te propose une autre version histoire de ne pas te laisser seul

    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
    18
    19
    20
    21
    22
    $path = "C:\MonDossier\Voyage"
    $extension = ".jpg", ".mp4"
     
    ### Déplacement avec renommage ###
    # Pour chaque sous-dossier de sous-dossier du $path
    Get-ChildItem -Path "${path}\*\*" -Directory | ForEach-Object {
     
        # Stock le dossier dans $dossier
        $dossier = $_
     
        # Pour chaque fichier du dossier qui correspond aux extensions de $extension
        $dossier | Get-ChildItem -File | Where-Object {$_.Extension -in $extension} | ForEach-Object {
            $i = 0 # initialise le compteur
            # Déplace le fichier vers son parent avec comme nom le compteur
            Move-Item -LiteralPath $_.FullName -Destination "$($dossier.Parent.FullName)\${i}$($_.Extension)" -WhatIf
            $i++ # Incrémente le compteur
        }
    }
     
    ### Nettoyage des dossiers vides ###
    # Pour chaque sous-dossier de sous-dossier du $path | si il est vide | on le supprime
    Get-ChildItem -Path "${path}\*\*" -Directory | Where-Object {!(Test-Path -Path "$($_.FullName)\*")} | Remove-Item -WhatIf

    Nous aurions pu partir sur un Group-Object pour regrouper les fichier par dossier (je pense que c'est une bonne idée) mais le code aurait été moins compréhensible je suppose.

    PS : Désolé j'ai une préférence pour les pipelines avec | plutôt que les foreach

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

Discussions similaires

  1. Renommage fichier avec un BAT
    Par ritchie23 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 05/07/2011, 16h44
  2. problème renommage fichier avec rename()
    Par nicomax34 dans le forum Langage
    Réponses: 2
    Dernier message: 22/10/2010, 18h32
  3. Renommage fichiers avec ListBox
    Par boobz79 dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 10/02/2010, 08h49
  4. Renommage fichier
    Par shub dans le forum Access
    Réponses: 4
    Dernier message: 23/01/2006, 20h32
  5. Renommage fichiers et répertoire recursif
    Par flasomm dans le forum Langage
    Réponses: 4
    Dernier message: 11/12/2005, 22h58

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