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 :

Copie de fichier


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Léponge85
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 77
    Par défaut Copie de fichier
    Bonjour ,

    Je viens de réaliser un petit script qui me permet de copier des fichiers vers une autre destination.
    le voici :


    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
    $users1 = import-csv TESTusers.csv
    $users2 = import-csv users.csv
    
    foreach ($ligne in $users1)
    {	
    	$dir = $ligne.MailDir
    }
    
    foreach ($ligne2 in $users2)
    {
    	$dir2 = $ligne2.MailDir
    }
    
    
    if ($ligne.Email -eq $ligne2.Email)
    {
    	copy-item $dir -destination $dir2
    }
    Sauf que le probleme est qu'il ne me copie pas tout les element du fichier a copier.
    Par exemple je veux copier tout se qui a dans le repertoire 01 vers le 02.
    MailDir est du genre C:\test\01\ et C:\test\02\

    Pouvez vous m'aider svp
    Merci beaucoup

  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
    Salut,
    Citation Envoyé par Léponge85
    Sauf que le probleme est qu'il ne me copie pas tout les element du fichier a copier.
    Au vu du code c'est normal, ton itération n'est pas imbriquée et ton traitement est à l'extérieur de la boucle. Revoit la logique de ton traitement.

  3. #3
    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 solution, pour l'itération, basée sur des énumérateurs :
    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
     #Collections
    $Source=1..5
    $Destination="a","b","c","d","e"
    
      #Enumérateurs des collections
    $EnumS=$Source.GetEnumerator()
    $EnumD=$Destination.GetEnumerator()
    
     #Parcourt des 2 collections
    While ($EnumS.MoveNext() -eq $True)
    {
     [void]$EnumD.MoveNext()
     "Copie {0} vers {1}" -F $EnumS.Current,$EnumD.Current
    }
    Je te laisse ajouter qq contrôle sur les bornes.

  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
    Une fonction qui pourra servir à d'autre :
    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
    36
    37
    Function Itere([System.Collections.IEnumerator] $Source, 
                   [System.Collections.IEnumerator] $Destination, 
                   [ScriptBlock] $Traitement,
                   [switch] $Strict) {
     #Itération parallèle sur 2 collections
     #Les interfaces $Source et $Destination proviennent des instances de collections à traiter.
     #$Traitement contient le code du traitement à effectuer sur chaque élément d'une ou des collections ( principe du foncteur sans utiliser de délégué)
     #Strict indique si l'itération échoue ou pas si les deux collections ne sont pas de taille égale.
     
    trap {}
      $ErrorMessage="{0} `"La collection {1} ne contient pas le même nombre d'éléments que la collection {2}`""
      if ($Strict)
       {$Action="Throw"} #Déclenche une exception
      else
       {$Action="Write-Warning"} #Affiche un Warning sur la console
     
      While ($Source.MoveNext() -eq $True)
      {
        [void]$Destination.MoveNext()
          #La fin de l'itération sur la collection de destinatation est-elle déjà atteinte ?  
        if ($Destination.Current -ne $null )
         { &$Traitement}
        else 
         { Invoke-Expression ($ErrorMessage -F $Action,"Destination","Source") }
      } #While. La Fin de la collection Source est atteinte
     
       #Reste-t-il des éléments à parcourir pour l'itérateur de la collection de destinatation?
      [void]$Destination.MoveNext() 
      if ($Destination.Current -ne $null )
         { Invoke-Expression  ($ErrorMessage -F $Action,"Source","Destination")}
    }#itere
     
    $Traitement = { $Src=$Source.Current 
                    $Dest=$Destination.Current
                    "Copie {0} vers {1}" -F $Src,$Dest
    }
    Quelque tests :
    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
    $Source=1..5
    $Destination="a","b","c","d","e"
    Itere $Source.GetEnumerator() $Destination.GetEnumerator() $Traitement
     
    $Source=1..4
    $Destination="a","b","c","d","e"
    Itere $Source.GetEnumerator() $Destination.GetEnumerator() $Traitement
    Itere $Source.GetEnumerator() $Destination.GetEnumerator() $Traitement -Strict
     
    $Source=1..4
    $Destination="a","b","c"
    Itere $Source.GetEnumerator() $Destination.GetEnumerator() $Traitement
    Itere $Source.GetEnumerator() $Destination.GetEnumerator() $Traitement -Strict
     
    $Source=@() 
    $Destination="a","b","c"
    Itere $Source.GetEnumerator() $Destination.GetEnumerator() $Traitement
    Itere $Source.GetEnumerator() $Destination.GetEnumerator() $Traitement -Strict
     
    $Source=1..4
    $Destination=@()
    Itere $Source.GetEnumerator() $Destination.GetEnumerator() $Traitement
    Itere $Source.GetEnumerator() $Destination.GetEnumerator() $Traitement -Strict
     
    $Source=@() 
    $Destination=@()
    Itere $Source.GetEnumerator() $Destination.GetEnumerator() $Traitement

Discussions similaires

  1. Copie de fichier sur le bureau
    Par LoicH dans le forum C++Builder
    Réponses: 3
    Dernier message: 01/05/2005, 20h57
  2. [C#] Copie de fichier via l'API
    Par slyv dans le forum Windows Forms
    Réponses: 5
    Dernier message: 20/12/2004, 22h39
  3. [C#] Copie de fichier via l'API
    Par slyv dans le forum Windows
    Réponses: 5
    Dernier message: 20/12/2004, 22h35
  4. [Kylix] Copie de fichier...
    Par paty.olivier dans le forum EDI
    Réponses: 1
    Dernier message: 23/06/2004, 12h55
  5. Copie de fichier
    Par Bjorn dans le forum C
    Réponses: 4
    Dernier message: 11/06/2002, 15h23

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