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 :

Fichier dans dossier avec regex comparer contenu de ce dossier avec le nom dans un fichier


Sujet :

Scripts/Batch

  1. #21
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Essaie aussi de fermer le fichier Excel pour voir

  2. #22
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 126
    Points : 23
    Points
    23
    Par défaut
    En effectuant la modif, j'ai bien le résultat escompté. Cependant, comme évoqué j'ai changé le nom d'un fichier du dossier comme ceci :

    CLASSEUR_CV_123.pdf

    Il devrait donc me faire remonter une incohérence avec le nom dans l'excel ^[0-9]{14}CLASSEUR[A-Za-z0-9_]+\.pdf

    Du moins me dire nok ou inexact. C'est pour cela qu'une analyse comparative par ligne pourrait être intéressante.

    De même si j'enlève tous les fichiers du dossier aucune remontée d'inexactitude


    ---------------------------------------------------------------------------------------------------










    Dossier a analyser *: C:\Users\guill\Desktop\classeur\


    Fin

    ---------------------------------------------------------------------------------------------------

    Citation Envoyé par ericlm128 Voir le message
    Nous allons donc debuger, ajoute $regexps ici :

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $regexps
    $dossier_name = Read-Host "Dossier a analyser "
    $dossier_name = $dossier_name.Replace('"', "")

    Il devrait t'afficher les pattern issus du fichier Excel comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dossier a analyser *:

  3. #23
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Peut être est ce le traitement qui n'est pas celui que tu attend.

    Pour chaque fichier je vérifie si une regexp correspond. Si oui on affiche rien, si aucune correspondance j'affiche le fichier (Write-Host "Fichier non reconnu : $filename")

  4. #24
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 126
    Points : 23
    Points
    23
    Par défaut
    A quel niveau je rajoute ce code ?


    Citation Envoyé par ericlm128 Voir le message
    Je ne vois rien d'anormal vu d'ici

    Tu peux ajouter de l'affichage dans le bloc de traitement
    Code powershell : 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
    foreach($filename in $filenames)
    {
        $valid = $false
        Write-Host "`nAnalyse : Fichier : $filename"
        foreach($regexp in $regexps)
        {
            Write-Host "Analyse : Regexp : $regexp"
            if ($filename -match $regexp)
            {
                Write-Host "Analyse : Correspond"
                $valid = $true
                break
            }
            Write-Host "Analyse : Ne correspond pas"
        }
     
        if (!$valid)
        {
            Write-Host "Fichier non reconnu : $filename"
        }
    }

  5. #25
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Je crois que j'ai compris en te relisant, je ne me sert pas des noms de fichier mais des regexp.

    Je vais modifier si tu préfère

  6. #26
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    J'utilise cette colonne : Regex du fichier.
    a revoir le fichier il n'existe pas le nom du fichier exact

  7. #27
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 126
    Points : 23
    Points
    23
    Par défaut
    Le fichier est bien en xlsm ou vois tu xlsx ?


    Citation Envoyé par ericlm128 Voir le message
    Attention à l'extension de ton fichier Excel je vois du xlsx vs xlsm faut mettre la bonne

  8. #28
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Sinon tu pourrais renvoyer le fichier Excel + l'arbo parce que j'ai seulement l'ancienne

  9. #29
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Citation Envoyé par saga974 Voir le message
    A quel niveau je rajoute ce code ?
    Tu remplace toute la boucle foreach
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($filename in $filenames)
    {
    ....
    }

  10. #30
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 126
    Points : 23
    Points
    23
    Par défaut
    Voila je t'ai tout mis en espérant rien avoir oublié


    Citation Envoyé par saga974 Voir le message
    Attends je te renvoie tout. Le fichier que je t'ai donné est bien en xlsm lol je suis perdu la.

  11. #31
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    1)
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    powershell.exe -executionpolicy unrestricted -force yes
    Set-ExecutionPolicy RemoteSigned
    Ceci n'est pas nécessaire, supprime le. Il faut faire juste une fois sur le poste/profil utilisateur ceci : Set-ExecutionPolicy RemoteSigned et valider


    2) je te confirme que c'est bien le classeur 4


    3) Tu as ajouter plus de cellule, les cellules vides match avec n'importe quelle fichier. J'ajoute un filtre




    Essaie ceci, les fichiers ne sont pas reconnus chez moi puisqu'ils commencent par YYYYmmddHHMMSS
    Code powershell : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    $excel_filename = "20220215_Description-des-données.xlsm"
     
    cls
    $host.UI.RawUI.WindowTitle = "Analyse de dossier en fonction du fichier Excel"
    try
    {
        $scriptPath = Split-Path -Parent $PSCommandPath
        Add-Type -path "$scriptPath\EPPlus.dll"
    }
    catch
    {
        Write-Host "Erreur : Impossible de charger la librairie EPPlus.dll"
        Read-Host
        exit 1
    }
     
    try
    {
        $f = Get-Item -LiteralPath $excel_filename -ErrorAction Stop
        $obj = New-Object OfficeOpenXml.ExcelPackage $f
        $regexps = $obj.Workbook.Worksheets[4].Cells["E6:E300"] | Select-Object -ExpandProperty Text | Where-Object {$_ -ne ""}
    }
    catch
    {
        Write-Host "Erreur : Chargement impossible du fichier excel $excel_filename"
        Read-Host
        exit 1
    }
     
    $dossier_name = Read-Host "Dossier a analyser "
    $dossier_name = $dossier_name.Replace('"', "")
     
    Write-Host ""
     
    if (!(Test-Path -LiteralPath $dossier_name -PathType Container))
    {
        Write-Host "Erreur : Le dossier n'existe pas"
        Read-Host
        exit 1
    }
     
    $filenames = Get-ChildItem -Path $dossier_name -File -Force | Select-Object -ExpandProperty Name
     
    foreach($filename in $filenames)
    {
        $valid = $false
        foreach($regexp in $regexps)
        {
            if ($filename -match $regexp)
            {
                $valid = $true
                break
            }
        }
     
        if (!$valid)
        {
            Write-Host "Fichier non reconnu : $filename"
        }
    }
     
    Write-Host "`n`nFin"
    Read-Host

  12. #32
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Il faut juste enlever le mode "débug"

    Supprime ou met en commentaire avec un # en début de ligne ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Write-Host "`nAnalyse : Fichier : $filename"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Write-Host "Analyse : Regexp : $regexp"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Write-Host "Analyse : Ne correspond pas"

  13. #33
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Après c'est juste de l'affichage et de la mise en forme, actuellement le script affiche seulement les fichiers ce qui ne correspondant pas (a aucune regexp)

  14. #34
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Voici le code avec le besoin supplémentaire

    Code powershell : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    cls
    $host.UI.RawUI.WindowTitle = "Analyse de dossier en fonction du fichier Excel"
     
    try
    {
        $scriptPath = Split-Path -Parent $PSCommandPath
        Add-Type -path "$scriptPath\EPPlus.dll"
    }
    catch
    {
        Write-Host "Erreur : Impossible de charger la librairie EPPlus.dll"
        Read-Host
        exit 1
    }
     
    $excel_filename = [string](Read-Host "Fichier Excel de référence ")
    $excel_filename = $excel_filename.Replace('"', "")
     
    try
    {
        $f = Get-Item -LiteralPath $excel_filename -ErrorAction Stop
        $obj = New-Object OfficeOpenXml.ExcelPackage $f
        $regexps = $obj.Workbook.Worksheets[4].Cells["E6:E300"] | Select-Object -ExpandProperty Text | Where-Object {$_ -ne ""}
    }
    catch
    {
        Write-Host "Erreur : Chargement impossible du fichier excel $excel_filename"
        Read-Host
        exit 1
    }
     
    $dossier_name = [string](Read-Host "Dossier a analyser ")
    $dossier_name = $dossier_name.Replace('"', "")
     
    Write-Host ""
     
    if (!(Test-Path -LiteralPath $dossier_name -PathType Container))
    {
        Write-Host "Erreur : Le dossier n'existe pas"
        Read-Host
        exit 1
    }
     
    $filenames = Get-ChildItem -Path $dossier_name -File -Force | Select-Object -ExpandProperty Name
     
    foreach($filename in $filenames)
    {
        $valid = $false
        foreach($regexp in $regexps)
        {
            if ($filename -match $regexp)
            {
                $valid = $true
                break
            }
        }
     
        if (!$valid)
        {
            Write-Host "Fichier non reconnu : $filename"
        }
    }
     
    Write-Host "`n`nFin"
    Read-Host

    PS : Après on pourrait afficher un message si tout est bon, compter le nombre de bon et mauvais ... et ainsi de suite à l'imagination

  15. #35
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Petit tips, lorsqu'il te demande le fichier ou le dossier tu peux le prendre dans ton explorateur et le glisser sur la fenêtre ça colle le chemin

  16. #36
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Ah il en reste 1 alors ! 😋

  17. #37
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Bon après c'est toi qui vois ce que tu souhaites afficher.
    Si tu veux 1 ligne de résultat par fichier ou juste les erreur.
    Si 1 ligne par fichier on affichera le fichier sa serait plus simple pour savoir de quoi on parle

  18. #38
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 126
    Points : 23
    Points
    23
    Par défaut
    Tu sais Eric si je peux permettre a mes clients d'avoir un outil très précis je suis totalement favorable à ca.
    Par exemple comme tu le dis compter le nombre de fichiers attendus par rapport au fichier excel, le nombre de fichiers présents dans le dossier.

    De même je vais compléter les descriptions que tu donnes par exemple "Dossier à analyser" je souhaiterai compléter "Rentrez le chemin complet du dossier à analyser"

    De même pour le fichier excel




    Citation Envoyé par ericlm128 Voir le message
    Voici le code avec le besoin supplémentaire

    Code powershell : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    cls
    $host.UI.RawUI.WindowTitle = "Analyse de dossier en fonction du fichier Excel"
     
    try
    {
        $scriptPath = Split-Path -Parent $PSCommandPath
        Add-Type -path "$scriptPath\EPPlus.dll"
    }
    catch
    {
        Write-Host "Erreur : Impossible de charger la librairie EPPlus.dll"
        Read-Host
        exit 1
    }
     
    $excel_filename = [string](Read-Host "Fichier Excel de référence ")
    $excel_filename = $excel_filename.Replace('"', "")
     
    try
    {
        $f = Get-Item -LiteralPath $excel_filename -ErrorAction Stop
        $obj = New-Object OfficeOpenXml.ExcelPackage $f
        $regexps = $obj.Workbook.Worksheets[4].Cells["E6:E300"] | Select-Object -ExpandProperty Text | Where-Object {$_ -ne ""}
    }
    catch
    {
        Write-Host "Erreur : Chargement impossible du fichier excel $excel_filename"
        Read-Host
        exit 1
    }
     
    $dossier_name = [string](Read-Host "Dossier a analyser ")
    $dossier_name = $dossier_name.Replace('"', "")
     
    Write-Host ""
     
    if (!(Test-Path -LiteralPath $dossier_name -PathType Container))
    {
        Write-Host "Erreur : Le dossier n'existe pas"
        Read-Host
        exit 1
    }
     
    $filenames = Get-ChildItem -Path $dossier_name -File -Force | Select-Object -ExpandProperty Name
     
    foreach($filename in $filenames)
    {
        $valid = $false
        foreach($regexp in $regexps)
        {
            if ($filename -match $regexp)
            {
                $valid = $true
                break
            }
        }
     
        if (!$valid)
        {
            Write-Host "Fichier non reconnu : $filename"
        }
    }
     
    Write-Host "`n`nFin"
    Read-Host

    PS : Après on pourrait afficher un message si tout est bon, compter le nombre de bon et mauvais ... et ainsi de suite à l'imagination

  19. #39
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Code powershell : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    cls
    $host.UI.RawUI.WindowTitle = "Analyse de dossier en fonction du fichier Excel"
     
    try
    {
        $scriptPath = Split-Path -Parent $PSCommandPath
        Add-Type -path "$scriptPath\EPPlus.dll"
    }
    catch
    {
        Write-Host "Erreur : Impossible de charger la librairie EPPlus.dll"
        Read-Host
        exit 1
    }
     
    $excel_filename = [string](Read-Host "Fichier Excel de référence ")
    $excel_filename = $excel_filename.Replace('"', "")
     
    try
    {
        $f = Get-Item -LiteralPath $excel_filename -ErrorAction Stop
        $obj = New-Object OfficeOpenXml.ExcelPackage $f
        $regexps = $obj.Workbook.Worksheets[4].Cells["E6:E300"] | Select-Object -ExpandProperty Text | Where-Object {$_ -ne ""}
    }
    catch
    {
        Write-Host "Erreur : Chargement impossible du fichier excel $excel_filename"
        Read-Host
        exit 1
    }
     
    $dossier_name = [string](Read-Host "Rentrez le chemin complet du dossier à analyser ")
    $dossier_name = $dossier_name.Replace('"', "")
     
    Write-Host ""
     
    if (!(Test-Path -LiteralPath $dossier_name -PathType Container))
    {
        Write-Host "Erreur : Le dossier n'existe pas"
        Read-Host
        exit 1
    }
     
    $filenames = Get-ChildItem -Path $dossier_name -File -Force | Select-Object -ExpandProperty Name
     
    foreach($filename in $filenames)
    {
        Write-Host "Analyse : Fichier : $filename"
     
        $find_regexp = $null
        foreach($regexp in $regexps)
        {
            if ($filename -match $regexp)
            {
                $find_regexp = $regexp
                break
            }
        }
     
        if ($find_regexp)
        {
            Write-Host "Analyse : Regexp : $find_regexp"
            Write-Host "Analyse : Correspond`n"
        }
        else
        {
            Write-Host "Analyse : Ne correspond pas`n"
        }
    }
     
    Write-Host "`n`nFin"
    Read-Host

  20. #40
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 126
    Points : 23
    Points
    23
    Par défaut
    Bonjour Eric,

    Premièrement un grand Merci pour l'avancée d'hier et je m'excuse d'occuper ton temps à mes prises de tête sur mon sujet.
    Ton tips est effectivement excellent car ca facilitera grandement les choses.

    Pour reprendre où nous en étions hier avec tout ce que tu m'as fourni j'ai compilé ton code pour avoir ce résultat ci :


    Code PowerShell : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    cls
    $host.UI.RawUI.WindowTitle = "Analyse de dossier en fonction du fichier Excel"
     
    try
    {
        $scriptPath = Split-Path -Parent $PSCommandPath
        Add-Type -path "$scriptPath\EPPlus.dll"
    }
    catch
    {
        Write-Host "Erreur : Impossible de charger la librairie EPPlus.dll"
        Read-Host
        exit 1
    }
     
    $excel_filename = [string](Read-Host "Fichier Excel de référence ")
    $excel_filename = $excel_filename.Replace('"', "")
     
    try
    {
        $f = Get-Item -LiteralPath $excel_filename -ErrorAction Stop
        $obj = New-Object OfficeOpenXml.ExcelPackage $f
        $regexps = $obj.Workbook.Worksheets[4].Cells["E6:E300"] | Select-Object -ExpandProperty Text | Where-Object {$_ -ne ""}
    }
    catch
    {
        Write-Host "Erreur : Chargement impossible du fichier excel $excel_filename"
        Read-Host
        exit 1
    }
     
    $dossier_name = [string](Read-Host "Dossier a analyser ")
    $dossier_name = $dossier_name.Replace('"', "")
     
    Write-Host ""
     
    if (!(Test-Path -LiteralPath $dossier_name -PathType Container))
    {
        Write-Host "Erreur : Le dossier n'existe pas"
        Read-Host
        exit 1
    }
     
    $filenames = Get-ChildItem -Path $dossier_name -File -Force | Select-Object -ExpandProperty Name
     
    foreach($filename in $filenames)
    {
        $valid = $false
        Write-Host "`nAnalyse : Fichier : $filename"
        foreach($regexp in $regexps)
        {
            Write-Host "Analyse : Regexp : $regexp"
            if ($filename -match $regexp)
            {
                Write-Host "Analyse : Correspond"
                $valid = $true
                break
            }
            Write-Host "Analyse : Ne correspond pas"
        }
     
        if (!$valid)
        {
            Write-Host "Fichier non reconnu : $filename"
        }
    }
     
    Write-Host "`n`nFin"
    Read-Host

    Il est top !

    Si tu le veux bien, pourrions-nous essayer d'y apporter de la lisibilité comme évoqué dans mes messages afin d'avoir un résultat propre comme ceci pour chaque fichier :

    Analyse : Correspond ou ne correspond pas

    Évidemment si c'est possible d'obtenir ceci.

    Tu parlais de compter le nombre de fichiers. Je suis preneur pour avoir une visualisation pour comparer le nombre de fichiers attendus dans le dossier par rapport au fichier Excel. Avec ceci je pense que ce sera déjà vraiment très bien à moins que toi par ta grande expérience tu voies quelque chose qui apporte encore de la robustesse au code.



    Citation Envoyé par ericlm128 Voir le message
    Petit tips, lorsqu'il te demande le fichier ou le dossier tu peux le prendre dans ton explorateur et le glisser sur la fenêtre ça colle le chemin

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/03/2013, 10h55
  2. Réponses: 5
    Dernier message: 12/03/2010, 11h03
  3. comparer contenu de deux fichiers
    Par Earl7 dans le forum Langage
    Réponses: 5
    Dernier message: 02/02/2009, 16h07
  4. Recuperer le contenu d'un fichier avec son nom et son chemin
    Par varfendell dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 16/07/2008, 09h47
  5. Instancier un type avec son nom contenu dans un String
    Par the666deus dans le forum Langage
    Réponses: 7
    Dernier message: 24/05/2007, 14h41

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