[Powershell] Recherche fichier à partir d'un csv

Recherche fichier à partir d'un csv [Powershell] - Divers - Programmation

Marsh Posté le 25-02-2015 à 23:29:34    

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"
Reply

Marsh Posté le 25-02-2015 à 23:29:34   

Reply

Marsh Posté le 25-02-2015 à 23:54:03    

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

Reply

Marsh Posté le 26-02-2015 à 08:54:06    

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"
Reply

Marsh Posté le 26-02-2015 à 12:15:54    

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).

Reply

Marsh Posté le 26-02-2015 à 12:17:47    

: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"
Reply

Marsh Posté le 26-02-2015 à 13:38:30    

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

Reply

Marsh Posté le 26-02-2015 à 22:10:32    

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 ?

Reply

Marsh Posté le 27-02-2015 à 10:12:41    

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.

Reply

Marsh Posté le 27-02-2015 à 12:32:38    

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!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed