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 :

Scinder une liste de fichier d'un répertoire [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Par défaut Scinder une liste de fichier d'un répertoire
    Bonjour,

    Je tourne un peu en rond :

    J'ai plus de 2000 fichier dans un répertoire et j'aimerai pouvoir les déplacer par lot de 100 (par exemple) dans des répertoire séparé.

    J'arrive à afficher le nombre de fichier présent, mais pas à lister les 100 premiers par exemple et J'arrive à lister le contenu par
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem "C:\ftp\rep1\"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @(Get-ChildItem "C:\ftp\rep1\").count
    Je pense que c'est un début, mais pour la suite je bloque.

    Merci d'avance de votre aide.

    Rakhann

  2. #2
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Par défaut
    Bonjour,

    J'ai un bon début de piste je pense :

    Pour Sélectionner les 100 premiers fichiers du répertoire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $path = "C:\monrep"
    $folders = Get-ChildItem -path $path
    $folder100 = $Folders | Select-object -first 100
    Création de repertoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $newfolder = "NewRep_"
    for ($nbr=1; $nbr -le 21; $nbr ++) {     
    [string]$num = $nbr        
    $rep = $newfolder + $num 
    new-item $path -ItemType "directory" -Name $rep
                                            }
    Je bosse sur la suite

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Par défaut
    Ca avance un peu

    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
    <# 
    ce script a pour but de récupérer xnombre de fichier dans un repertoire
    pour ce cas on souhaite separer les fichiers par 100 et de les déplacer dans des repertoires séparés
    Pour cela On calcul le nombre de repertoire à créer
    #>
    
    $path = "C:\ftp\MonRep"
    $newfolder = "MonRep_250318_"
    
    $NBRFile = @(Get-ChildItem -path $path -File).Count
    $arrondi = [math]::Round($NBRFile / 100)
    
    
    for ($nbr=1; $nbr -le $arrondi; $nbr ++) {
            
    [string]$num = $nbr        
    $rep = $newfolder + $num 
    new-item $path -ItemType "directory" -Name $rep
    $folders = @(Get-ChildItem -path $path -File | Select-object -first 100)
    
    Move-Item $path\$folders -Destination $path\$rep 
                                            }
    Problème : Je n'ai pas réussi à déplacer les fichiers car j'ai ce message :

    Move-Item : Cannot find path 'C:\ftp\MonRep\MonRep-0000042-2341175-20180309.PDF
    MonRep-0000079-2341176-20180309.PDF MonRep-0000176-2341178-20180309.PDF MonRep-0000205-2341179-20180309.PDF
    MonRep-0000267-2341180-20180309.PDF MonRep-0000342-2341182-20180309.PDF MonRep-0000364-2341183-20180309.PDF
    MonRep-0000426-2341186-20180309.PDF MonRep-0000429-2341187-20180309.PDF MonRep-0000457-2341188-20180309.PDF
    MonRep-0000462-2341189-20180309.PDF MonRep-0000463-2341190-20180309.PDF MonRep-0000506-2341191-20180309.PDF
    MonRep-0000541-2341192-20180309.PDF MonRep-0000547-2341193-20180309.PDF MonRep-0000602-2341195-20180309.PDF
    MonRep-0000630-2341197-20180309.PDF MonRep-0000633-2341198-20180309.PDF MonRep-0000639-2341199-20180309.PDF
    MonRep-0000642-2341200-20180309.PDF MonRep-0000667-2341201-20180309.PDF MonRep-0000747-2341205-20180309.PDF
    MonRep-0000749-2341206-20180309.PDF MonRep-0000772-2341207-20180309.PDF MonRep-0000781-2341208-20180309.PDF
    MonRep-0000804-2341209-20180309.PDF MonRep-0000806-2341210-20180309.PDF MonRep-0000807-2341211-20180309.PDF
    MonRep-0000818-2341212-20180309.PDF MonRep-0000842-2341213-20180309.PDF MonRep-0000857-2341214-20180309.PDF
    MonRep-0000864-2341215-20180309.PDF MonRep-0000873-2341216-20180309.PDF MonRep-0000985-2341219-20180309.PDF
    MonRep-0000988-2341220-20180309.PDF MonRep-0001021-2341221-20180309.PDF MonRep-0001022-2341222-20180309.PDF
    MonRep-0001027-2341223-20180309.PDF MonRep-0001027-2341224-20180309.PDF MonRep-0001042-2341225-20180309.PDF
    MonRep-0001055-2341226-20180309.PDF MonRep-0001059-2341227-20180309.PDF MonRep-0001064-2341228-20180309.PDF
    MonRep-0001115-2341229-20180309.PDF MonRep-0001116-2341230-20180309.PDF MonRep-0001155-2341231-20180309.PDF
    MonRep-0001177-2341232-20180309.PDF MonRep-0001178-2341233-20180309.PDF MonRep-0001181-2341234-20180309.PDF
    MonRep-0001182-2341235-20180309.PDF MonRep-0001187-2341236-20180309.PDF MonRep-0001214-2341239-20180309.PDF
    MonRep-0001386-2341242-20180309.PDF MonRep-0001404-2341243-20180309.PDF MonRep-0001405-2341244-20180309.PDF
    MonRep-0001416-2341246-20180309.PDF MonRep-0001485-2341248-20180309.PDF MonRep-0001498-2341249-20180309.PDF
    MonRep-0001584-2341252-20180309.PDF MonRep-0001615-2341253-20180309.PDF MonRep-0001643-2341254-20180309.PDF
    MonRep-0001661-2341256-20180309.PDF MonRep-0001689-2341257-20180309.PDF MonRep-0001689-2341258-20180309.PDF
    MonRep-0001731-2341259-20180309.PDF MonRep-0001801-2341263-20180309.PDF MonRep-0001813-2341264-20180309.PDF
    MonRep-0001851-2341265-20180309.PDF MonRep-0001852-2341266-20180309.PDF MonRep-0001854-2341267-20180309.PDF
    MonRep-0001899-2341270-20180309.PDF MonRep-0001899-2341271-20180309.PDF MonRep-0001907-2341272-20180309.PDF
    MonRep-0001910-2341273-20180309.PDF MonRep-0001910-2341274-20180309.PDF MonRep-0001926-2341275-20180309.PDF
    MonRep-0001956-2341277-20180309.PDF MonRep-0001956-2341278-20180309.PDF MonRep-0001973-2341280-20180309.PDF
    MonRep-0002013-2341284-20180309.PDF MonRep-0002039-2341285-20180309.PDF MonRep-0002040-2341286-20180309.PDF
    MonRep-0002060-2341288-20180309.PDF MonRep-0002078-2341292-20180309.PDF MonRep-0002079-2341293-20180309.PDF
    MonRep-0002107-2341296-20180309.PDF MonRep-0002171-2341298-20180309.PDF MonRep-0002262-2341300-20180309.PDF
    MonRep-0002268-2341301-20180309.PDF MonRep-0002296-2341307-20180309.PDF MonRep-0002305-2341309-20180309.PDF
    MonRep-0002308-2341310-20180309.PDF MonRep-0002334-2341311-20180309.PDF MonRep-0002406-2341314-20180309.PDF
    MonRep-0002412-2341315-20180309.PDF MonRep-0002415-2341316-20180309.PDF MonRep-0002419-2341317-20180309.PDF
    MonRep-0002460-2341318-20180309.PDF MonRep-0002505-2341319-20180309.PDF MonRep-0002506-2341320-20180309.PDF'
    because it does not exist.
    At C:\Script_Ps1\FolderCountFiles.ps1:21 char:1
    + Move-Item $path\$folders -Destination $path\$rep
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : ObjectNotFound: (C:\ftp\MonRep\E...20-20180309.PDF:String) [Move-Item], ItemNotFoundExcepti
    on
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.MoveItemCommand
    La solution ne doit pas être loin, mais je bloque.

    Merci de votre aide

    Rakhann

  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
    Salut,
    ici il se peut qu'une conversion implicite te crée une seule chaîne contenant tous les noms de fichiers.
    Ton tableau de fichier ne contient que des noms de fichiers et pas des chemins complet d'accès.
    Avec le nom complet tu pourrais écrire :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Move-Item $folders
    #ou
    $folders|Move-Item
    mais je n'ai pas testé.
    Pour le découpage de tableau tu peux aussi utiliser la forme $Tableau[0..100], $Tableau[101..200] etc

  5. #5
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Par défaut
    Bonjour,

    J'y avais pensé, mais je n'ai pas réussi à rajouter le chemin dans mon tableau.
    D'autant que le traitement serait plus rapide, je pense.



    Du coup j'utilise un Foreach.
    Script complet :


    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
    <# 
    ce script a pour but de récupérer xnombre de fichier dans un repertoire
    pour ce cas on souhaite separer les fichiers par 100 et de les déplacer dans des repertoires séparés
    Pour cela On calcul le nombre de repertoire à créer
    #>
    
    $path = "C:\ftp\MonRep"
    $newfolder = "MonRep_250318_"
    
    $NBRFile = @(Get-ChildItem -path $path -File).Count
    $arrondi = [math]::Round($NBRFile / 100)
    
    
    for ($nbr=1; $nbr -le $arrondi; $nbr ++) {
            
    [string]$num = $nbr        
    $rep = $newfolder + $num 
    new-item $path -ItemType "directory" -Name $rep -ErrorAction SilentlyContinue
    $folders = @(Get-ChildItem -path $path -File | Select-object  -first 100)
    foreach ($movfile in $folders) {
    Move-Item "$path\$movfile" -Destination $path\$rep
                                   }
                                            }

    Merci pour tes conseils.


    Je pense que je peux mettre en résolu, sauf si vous avez d'autres conseils ou optimisation.

    Rakhann

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 11/04/2012, 20h04
  2. Réponses: 4
    Dernier message: 21/08/2007, 10h40
  3. Réponses: 0
    Dernier message: 01/08/2007, 12h12
  4. Réponses: 4
    Dernier message: 11/07/2007, 19h28
  5. Réponses: 2
    Dernier message: 20/06/2007, 10h34

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