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 :

Lister fichiers dans plusieurs dossiers [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 146
    Par défaut Lister fichiers dans plusieurs dossiers
    Bonjour à tous,

    j'aurais besoin d'aide dans un script que je réalise. J'ai une arboresence de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    C:\Script\
        |-fichier.ps1
        |-Dossier1
             |-fich.ps1
             |-fich2.ps1
        |-Dossier2
             |-fich3.ps1
    Je voudrais pouvoir lister l'ensemble des fichiers .ps1 présents dans mon répertoire Script, et dans ses sous répertoires. Je veux afficher les données de cette forme :
    1 - fichier.ps1
    2 - fich.ps1
    3 - fich2.ps1
    4 - fich3.ps1
    Néanmoins dans mon code, dans ma variable de fichier j'aimerais pouvoir stocker sois le chemin complet vers le fichier sois son dossier parent s'il n'est pas à la racine. Donc :
    fichier.ps1
    Dossier1\fich.ps1
    ...etc
    Tout ceci dans le but de pouvoir par la suite exécuter le fichier sélectionné par l'utilisateur. Je vous montre mon code actuel :

    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
    $i=1
    $chemin = "C:\Scripts\"
    $Files = Get-ChildItem $chemin 
    Write-Host "Liste des scripts presents : "
    foreach ($File in $Files)
    {
    	Write-Host " " $i "- " $File
    	$i++
    }
    $ret=Read-Host "Quel fichier souhaitez vous executer ? "
    if(($ret -le $i) -and ($ret -ge 1))
    {
    	$rep=Read-Host "Etes vous sur de vouloir executer le fichier " $Files[$ret-1] " (O - N) ?"
    	if(($rep -eq 'O') -and ($rep -eq 'o'))
    	{
    		Write-Host  "Execution du fichier " $Files[$ret-1]
    		$cmd = $chemin + $Files[$ret-1]
    		Start-Process powershell.exe $cmd
    	}
    	else
    	{
    		Write-Host  "Execution annulee"
    	}
    }
    else 
    { 
    	Write-Host "Le nombre saisi est incorrect"
    }
    Comme vous pouvez le voir je liste uniquement les fichiers présents dans Scripts et non pas dans les dossiers. De plus je ne sais pas comment faire pour ne lister que les .ps1 .

    Si quelqu'un peut m'aider, merci beaucoup !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 146
    Par défaut
    Bon finalement j'ai trouvé comment lister uniquement les .ps1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $Files = Get-ChildItem $chemin *.ps1
    J'ai vu sur le net aussi -include *.ps1 mais sa ne fonctionne pas (aucun resultats alors que j'ai des fichiers .ps1 présents)...

    J'ai aussi trouvé comment lister les fichiers dans les dossiers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $Files = Get-ChildItem $chemin *.ps1 -Recurse
    Néanmoins mon script agit d'une façon inatendu... Je le lance, j'ai 19 résultats de fichiers, je tape 3 (comme il me demande de choisir un fichier) et là il m'écrit "Le nombre saisi est incorrect"...
    Je ne comprend pas pourquoi je pase dans la clause else de mon if :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(($ret -lt $i) -and ($ret -ge 1))
    Ce code correspond bien à un if( ret < i ET ret >= 1) ? Ce qui est bizare c'est que si je tape, 1,2 ou un chiffre supérieur ou égal à 10 sa fonctionne. Mais si je tape un chiffre entre 3 et 9 sa passe dans le else... Juste avant mon id je me suis ajouté une ligne qui m'affiche mes variables i et ret, les résultats sont pourtant cohérent, je ne comprend pas...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 146
    Par défaut
    J'ai finalement réussi à trouver. En fait le Read-Host recupere ma variable en chaine de caractere. Il faut donc le forcer à le traduire en int :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [int]$ret=Read-Host "Bla bla"

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

Discussions similaires

  1. [Débutant] Rechercher un fichier dans plusieurs dossiers
    Par AcideBlood dans le forum VB.NET
    Réponses: 11
    Dernier message: 14/12/2014, 20h47
  2. [Batch] Copier un fichier dans plusieurs dossier sauf dossier sans fichier
    Par duffman39 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 02/07/2013, 17h13
  3. Réponses: 1
    Dernier message: 04/02/2010, 20h41
  4. [Batch] tri fichiers dans plusieurs dossiers
    Par brunovn dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 21/07/2009, 15h38
  5. Réponses: 1
    Dernier message: 13/10/2008, 08h17

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