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 :

Trier fichiers par extension


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 99
    Par défaut Trier fichiers par extension
    Bonjour

    J'ai un dossier : C:\Temp\Recup avec plus de 30'000 fichiers à l'intérieur, avec des extensions différentes, .mp3, .JPG, .png, .dll, .exe ...

    Je souhaite faire un script qui copie tous les fichiers .mp3 dans un dossier MP3, .JPG dans un dossier JPG, et ainsi de suite en automatique. Le dossier aurait simplement le nom de l'extension des fichiers qui y sont en automatique !

    Pouvez-vous m'aider ?

    Merci.

  2. #2
    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
    Billets dans le blog
    1
    Par défaut
    Une piste :
    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
    $Source='C:\Temp'
    $Destination='C:\Temp'
    
    $grp=Dir $Source -File |Group-Object -Property Extension
    $grp[0].Name
    $grp[0].Group
    
    $NewDirectory="$Destination\$($grp[0].Name)"
    MD $NewDirectory 
    
    $grp[0].Group|Copy-Item $NewDirectory -WhatIf
    #ou
    #$grp[0].Group|Move-Item $NewDirectory -WhatIf
    
    #Next ...
    # Dir $Source -File |
    #    Group-Object -Property Extension|
    #    Foreach {
    #      $_|
    #       Foreach {
    #         Write-verbose "Copie les fichiers d'extension '$($_.Name)'"
    #         ....
    #       }
    #    }

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 99
    Par défaut
    Un grand merci pour ton aide !

    Cependant j'ai une petite erreur :

    Copy-Item : L'objet d'entrée ne peut être lié à aucun paramètre de la commande, soit parce que cette commande
    n'accepte pas l'entrée de pipeline, soit parce que l'entrée et ses propriétés ne correspondent à aucun des paramètres
    qui acceptent l'entrée de pipeline.
    Au caractère H:\Scripts\Tri_par_extensions.ps1:11 : 17
    + $grp[0].Group | Copy-Item $NewDirectory
    + ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidArgument : (f6628495.xmlSObject) [Copy-Item], ParameterBindingException
    + FullyQualifiedErrorId : InputObjectNotBound,Microsoft.PowerShell.Commands.CopyItemCommand

    Le code :

    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
    $Source='C:\Temp\Test'
    $Destination='C:\Temp\Test\Tri'
    
    $grp=Dir $Source -File |Group-Object -Property Extension
    $grp[0].Name
    $grp[0].Group
    
    $NewDirectory="$Destination\$($grp[0].Name)"
    MD $NewDirectory 
    
    #$grp[0].Group | Copy-Item $NewDirectory -WhatIf
    $grp[0].Group|Move-Item $NewDirectory -WhatIf
    
    Dir $Source -File |
        Group-Object -Property Extension|
        Foreach {
          $_|
           Foreach {
             Write-verbose "Copie les fichiers d'extension '$($_.Name)'"
           }
        }
    EDIT : ça fonctionne avec ce code, j'ai rajouté -Destination au Move-Item :

    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
    $Source='C:\Temp\Test'
    $Destination='C:\Temp\Test\Tri'
    
    $grp=Dir $Source -File |Group-Object -Property Extension
    $grp[0].Name
    $grp[0].Group
    
    $NewDirectory="$Destination\$($grp[0].Name)"
    MD $NewDirectory 
    
    #$grp[0].Group | Copy-Item $NewDirectory -WhatIf
    $grp[0].Group | Move-Item -Destination $NewDirectory -Verbose
    
    Dir $Source -File |
        Group-Object -Property Extension|
        Foreach {
          $_|
           Foreach {
             Write-verbose "Copie les fichiers d'extension '$($_.Name)'"
           }
        }
    Par contre ça ne me le fait pas pour toutes les extensions mais que pour le premier fichier

  4. #4
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par steve15 Voir le message
    Cependant j'ai une petite erreur :
    Oui, il faut ajouter -Destination. J'ai testé le déplacement, mais pas la copie...
    Ceci dit, la réponse est dans l'aide en ligne

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 99
    Par défaut
    Oui c'est en ordre ! par contre, je suis bloqué il me fait que la première extension de la liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $grp[0].Name
    $grp[0].Group
    C'est la valeur 0 qui dit qu'il prend le premier fichier, si je met 1 il me prend la seconde extension, comment être dynamique et le faire pour tous en automatique ?

    Je pense qu'il faudrait mettre tout ce morceau de code dans une boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $grp=Dir $Source -File |Group-Object -Property Extension
    $grp[0].Name
    $grp[0].Group
    
    $NewDirectory="$Destination\$($grp[0].Name)"
    MD $NewDirectory 
    
    #$grp[0].Group | Copy-Item $NewDirectory -WhatIf
    $grp[0].Group | Move-Item -Destination $NewDirectory -Verbose
    mais je suis pas sûr et pas encore assez expérimenté !! Merci.

    merci.

  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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par steve15 Voir le message
    par contre, je suis bloqué il me fait que la première extension de la liste.
    Oui le code traite le premier groupe. C'était juste pour 'détailler' l'approche, à priori il te faudrait bien plus de détails
    Dans le code de test cité la seconde partie commentée est une approche possible pour traiter toute la collection. J'utilise le pipeline, mais tu peux utiliser des variables intermédiaires et des boucles Foreach pour aérer le code.

    En passant, le nom de répertoire $NewDirectory contient le '.' de l'extension, il faut donc le supprimer.
    Citation Envoyé par steve15 Voir le message
    mais je suis pas sûr et pas encore assez expérimenté
    Avec un jeux de test et l'usage du paramètre Whatif, aucun risque. Et c'est en forgeant que l'on devient forgeron

Discussions similaires

  1. Shell script pour compter le nombre de fichiers par extension
    Par andress33 dans le forum Shell et commandes GNU
    Réponses: 16
    Dernier message: 30/03/2015, 01h26
  2. [PHP 5.1] Trier fichiers par type apres les avoirs lister
    Par ketaaa dans le forum Langage
    Réponses: 4
    Dernier message: 28/05/2009, 21h47
  3. Réponses: 1
    Dernier message: 11/05/2009, 13h47
  4. Sélectionner un fichiers par extension
    Par Michaël dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 24/06/2006, 22h42
  5. [apache] .htaccess -> bloquer fichiers par extensions
    Par yann_441 dans le forum Apache
    Réponses: 2
    Dernier message: 01/07/2005, 18h14

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