Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
376 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  [Powershell] Recherche fichier à partir d'un csv

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Powershell] Recherche fichier à partir d'un csv

n°2251750
odin-78
Posté le 25-02-2015 à 23:29:34  profilanswer
 

Salut,
 
Je débute en scripting, moi et la prog/scripting ça fait deux. J'espère qu'un jour ça fera un.
 
 Je me suis donné un cas concret, du moins utile pour moi:
 
 J'ai un répertoire A contenant plein de fichier. Quelqu'uns à la racine et les autre dans des sous-répertoires.
 J'ai un fichier csv, contenant :  

  • nom de fichier
  • taille
  • empreinte CRC
  • nom de collection

Il y a 21 000 lignes.
 
Je souhaite déplacer uniquement les fichiers du répertoire A, ayant leur nom dans le CSV pour les mettre dans un répertoire B . Dans ce répertoire B, je voudrais créer un sous-répertoire avec le nom de collection du fichier. Si le dossier existe on déplace, sinon on crée le répertoire puis on déplace.
 
Je ne parviens pas à savoir comment matcher le fichier CSV avec le GetChildItem du répertoire. D'ailleurs ce n'est peut être pas la bonne méthode?
 
Quelqu'un pourrait m'aider svp
Dites moi si je ne suis pas clair, je ne dois pas bien expliquer.


---------------
"Life is game, remember we play together"
mood
Publicité
Posté le 25-02-2015 à 23:29:34  profilanswer
 

n°2251753
Je@nb
In ze cloud
Posté le 25-02-2015 à 23:54:03  profilanswer
 

tu montres ton code puis on voit ce qu'on peut faire :)

n°2251760
odin-78
Posté le 26-02-2015 à 08:54:06  profilanswer
 

Salut,

 

merci de ta réponse. Voici mon jet le plus conséquent:

 
Code :
  1. #Initialisation des variables
  2. $base = get-childitem "t:\Alley"
  3. $toto = "t:\Alley_baggett"
  4. $babaidx = import-csv '.\Alley\aacsv\baba20634_babaIdx516_01 May  2011_21150_copy_2.csv'
  5. $repCol = ".\Alley_nouveau\rangement\Alley- Collection"
  6. $repDou = ".\Alley_nouveau\rangement\doublons"
  7. $repHC = ".\Alley_nouveau\rangement\hors_collection"
  8. $Photo = 0
  9. $No = 0
  10. foreach ($Photo in $base)
  11.    
  12.     {
  13.      
  14.        if ($Photo.name -eq $babaidx[$No].photo) 
  15.        {
  16.        echo $photo
  17.         write-host "rentré dans le IF"
  18.         $NomColl = $babaidx[$No].collection
  19.          if (-not (Test-Path "$repCol\$NomColl" )) { New-Item -ItemType Directory -Name "$repCol$NomColl" }
  20.          
  21.           move-item $repCol\$NomColl\$Photo
  22.           elseif
  23.            move-item $repCol\$NomColl\$Photo
  24.            $PhotoDep = $PhotoDep+1
  25.            write-host $PhotoDep "photos sont déplacées"
  26.        }         
  27.        
  28.          $PhotNoDep = $PhotoNoDep +1
  29.                
  30.      }
  31.    
  32. write-host "Travail terminé"       
  33.        
  34.        
  35. #Deconnexion
  36. #remove-psdrive -name t
 

J'ai ajouté des echo pour voir si la machine rentrait dans les boucles mais elle ne rentre uniquement dans le foreach.


Message édité par odin-78 le 26-02-2015 à 08:54:23

---------------
"Life is game, remember we play together"
n°2251787
Je@nb
In ze cloud
Posté le 26-02-2015 à 12:15:54  profilanswer
 

Ah ouais là on part de loin :/ On a l'impression que tu sais même pas ce que tu fais ni ce que font tes variables (quand elles ont un nom explicite).

n°2251788
odin-78
Posté le 26-02-2015 à 12:17:47  profilanswer
 

:lol:
Désolé :(
 
Qu'est ce que je peux faire ? Y a des trucs à lire pour être moins "loin" ?


---------------
"Life is game, remember we play together"
n°2251797
Je@nb
In ze cloud
Posté le 26-02-2015 à 13:38:30  profilanswer
 

En gros l'algo c'est :
- Importer le CSV
- Boucler sur chaque ligne de ton csv :
   - Vérifier si la photo existe (et si possible en un seul exemplaire :D)
   - Si elle existe vérifier si le dossier de destination existe (basé sur sa collection)
   - Si le dossier n'existe pas, le créer
   - Déplacer la photo

n°2251830
odin-78
Posté le 26-02-2015 à 22:10:32  profilanswer
 

Je@nb a écrit :

En gros l'algo c'est :
- Importer le CSV
- Boucler sur chaque ligne de ton csv :
   - Vérifier si la photo existe (et si possible en un seul exemplaire :D)
   - Si elle existe vérifier si le dossier de destination existe (basé sur sa collection)
   - Si le dossier n'existe pas, le créer
   - Déplacer la photo

 

Oui c'est ca. Mais je ne sais pas comment boucler  sur chaque ligne rt fait la comparaison.

 

Est ce que tu penses  qu'à la vue de mon horrible niveau,  je m'attaque a trop complexe ?

n°2251849
Je@nb
In ze cloud
Posté le 27-02-2015 à 10:12:41  profilanswer
 

Si tu n'as pas les bases d'algo oui, sinon c'est relativement simple.
 
Mais faire une boucle c'est foreach, un comparaison c'est un if, trouver une valeur c'est un where etc.

n°2251861
gilou
Modérateur
Modzilla
Posté le 27-02-2015 à 12:32:38  profilanswer
 

Ce qui pèche surtout dans le code initial, c'est que:
1) il suppose que $babaidx est un array en résultat de import-csv (est-ce le cas?)
2) et surtout, on devrait parcourir cet array en boucle en faisant varier son indes $No, or ce dernier reste toujours à 0.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --    In umbra igitur pugnabimus. --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  [Powershell] Recherche fichier à partir d'un csv

 

Sujets relatifs
Recherche d'un caractère dans un texteRecherche dans txt
Script powershell et fichier CSVfichier CSV et retour a la ligne intempestif
Barre de recherche wikipédiaAide:extraire un groupe de données depuis un groupe de fichiers
[JAVA] Parser un fichier de log sans le lockerTRI TABLEAU à partir liste déroulante
Déplacement fichier 
Plus de sujets relatifs à : [Powershell] Recherche fichier à partir d'un csv


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR