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. #1
    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 Fichier dans dossier avec regex comparer contenu de ce dossier avec le nom dans un fichier
    Bonjour la communauté,

    Je vous sollicite car je désirerai écrire un script mais j'éprouve de grandes difficultés du fait que je débute.

    Présentation du sujet :
    - 1 un répertoire ARBUSTE
    - 2 dans ce répertoire un dossier nommé 20220509153020_ARBUSTE et dans lequel celui-ci contient des fichiers avec extensions de toutes sortes (ex: .doc .csv .pdf etc etc).
    - 3 dans le répertoire ARBUSTE un fichier nommé fichiers_des_donnees dans lequel la liste des fichiers du dossier ci-dessus apparaît mais avec des regex parfois et timestamp toujours.

    Problématique :

    Je souhaiterai que le script puisse analyser le contenu du dossier 20220509153020_ARBUSTE et comparer le contenu de ce dossier en particulier le nom des fichiers avec le contenu du fichier_des_donnees et ainsi dire s'il existe des erreurs ou non. La complexité réside surtout dans le fait que dans le listing que contient ce fichier_des_donnees les noms comportent des regex et timestamp. Il faudrait que le script indique que les regex match bien si elles sont bien écrites et lorsqu'il y'en a et pareil pour les timestamp.
    ex avec le fichier dans le dossier 20220509153020_ARBUSTE : 2022052118003030_ARBUSTE_FICHE_POSTE_1234567890.pdf et le nom qu'il possède dans le fichiers_des_donnees YYYYmmddHHMMSS_ARBUSTE_FICHE_POSTE_[A-Za-z0-9]{10}.pdf

    Précision :

    il faut absolument que fichiers_des_donnees ne subissent aucune transformation car j'ai réalisé une macro avec vba qui me génère ce fichier .txt avec ce contenu.
    Il faut également que le contenu du dossier 20220509153020_ARBUSTE ne subissent aucune modification afin que je me rapproche au plus près de la réalité.
    Tous les noms indiqués ci dessus pour le répertoire, le dossier et son contenu et le contenu de fichiers_des_donnees varieront à chaque fois.


    Je vous remercie d'avance et m'excuse également pour les maux de crâne que je risque de provoquer. Pour ma part, c'est déjà le cas
    N'hésitez pas à me demander des éclaircissements dans mes explications.
    Fichiers attachés Fichiers attachés

  2. #2
    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
    Bonjour,

    Utilisons ton vocabulaire :
    Répertoire : ARBUSTE
    Dossier : ARBUSTE\20220509153020_ARBUSTE

    Tu veux donc savoir si chaque ligne (pattern "spécial") de "fichiers_des_donnees.txt" permette de trouver 1 fichier dans le Dossier ?

    - Si un fichier est présent dans le Dossier et n'est pas trouvé par un pattern est ce une erreur ?
    - Si un pattern match plusieurs fichiers est ce une erreur ?
    - Pas de vérification sur la conformité du nom de Dossier ?
    - Quelle type de "joker" sont utilisées ? Tout ceux d'une expression régulière ? Uniquement cette forme [A-Za-z0-9]{10} ?
    - De quelle langage est issue ce format de "timestamp" YYYYmmddHHMMSS ?
    Si j'en crois un format de référence en C# : https://docs.microsoft.com/fr-fr/dot...format-strings
    YYYY N'existe pas
    mm Minute, définie entre 00 et 59
    dd Jour du mois, de 01 à 31
    HH Heure, au format de 24 heures, de 00 à 23
    MM Mois, de 01 à 12
    SS N'existe pas

    Je te conseil clairement de faire ce script en PowerShell

  3. #3
    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,

    Merci d'abord pour ta réponse.

    Je dirai que c'est plutôt l'inverse. Ce sont les fichiers dans le dossier qui doivent correspondre aux noms des fichiers contenu dans fichiers_des_donnees car c'est la référence d'origine. Et par comparaison entre eux faire remonter :
    - un résultat correct ou non sur les noms de fichiers sans regex
    - des erreurs si les noms comportant des regex ne sont pas bons entre eux

    Penses tu que cela est faisable ? Si non tu me conseilles powershell mais la le problème est que je n'y connais absolument rien d'une part et d'autre part, je dois proposer cet outillage a des clients qui ne maîtriseront pas non plus powershell. Le batch un simple double clic permettra à mes clients d'obtenir un confort d'utilisation sans élévation particulière de droits sur leur machines. Je veux bien voir les propositions que tu peux me faire malgré tout avec un script powershell mais je ne suis pas sur que mes clients puissent le réutiliser derrière.

  4. #4
    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
    Les scripts PowerShell ne nécessitent pas plus d'élévation de privilège qu'un batch, néanmoins il sont plus sécurisés dans le sens ou il faut autoriser l'exécution des scripts sur le poste avant son lancement.
    Ils sont aussi et surtout bien plus fiable, puissant et facile à maintenir/lire. En batch ça sera une usine à gaz.

    Vérifie déjà si la solution via PowerShell est viable avant que nous investissions du temps sur un code.

    Certaines de mes questions restent encore sans réponse.

    Exemple de script PowerShell (hello.ps1) :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Write-Host "Hello World"
    Read-Host

  5. #5
    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
    Eric,

    D'accord je ne savais pas tout ca heureusement que tu es la pour me l'apprendre. Ca peut donc valoir le coup.
    Pour tes questions je vais essayer d'être le plus précis possible.






    Si un fichier est présent dans le Dossier et n'est pas trouvé par un pattern est ce une erreur ?
    Oui il faut que ce soit une erreur remontée. Seuls les fichiers présents dans "fichiers_des_donnees" ,qui est la référence, doivent être présents dans le dossier 20220509153020_ARBUSTE



    - Si un pattern match plusieurs fichiers est ce une erreur ?
    Je ne comprends pas trop mais grosso modo chaque fichier sera différent il ne peut y avoir de fichiers similaires donc pour moi oui ce sera une erreur


    - Pas de vérification sur la conformité du nom de Dossier ?
    Le nom du dossier sera créé par un autre script à partir d'un code vba. Cela peut être un bonus mais ceci n'est pas une nécessité dans mon cas. Il prendra toujours la forme d'un timestamp au début puis underscore puis un nom lambda ex : 20220509153020_ARBUSTE


    - Quelle type de "joker" sont utilisées ? Tout ceux d'une expression régulière ? Uniquement cette forme [A-Za-z0-9]{10} ?

    Je ne comprends pas le mot "joker". Ce que je peux dire c'est que les regex ne seront pas toujours les mêmes. Il serait idéal que les noms de fichiers qu'indiquera le client dans le dossier
    20220509153020_ARBUSTE puissent subir soit une transformation en fonction de la regex indiquée dans "fichiers_des_donnees" soit une vérification et dire si oui ou non il y a une erreur de renommage



    - De quelle langage est issue ce format de "timestamp" YYYYmmddHHMMSS ? Je ne sais pas du tout mais c'est une contrainte souhaitée et obligatoire dans le nommage des fichiers
    Si j'en crois un format de référence en C# : https://docs.microsoft.com/fr-fr/dot...format-strings
    YYYY N'existe pas il s'agit de l'année
    mm Minute, définie entre 00 et 59
    dd Jour du mois, de 01 à 31
    HH Heure, au format de 24 heures, de 00 à 23
    MM Mois, de 01 à 12
    SS N'existe pas il s'agit des secondes

    Le timestamp doit apparaître obligatoirement cela fait partie d'une contrainte de nommage des fichiers.

    J'espère avoir été plus précis dans mes réponses je débute vraiment en code donc si tu vois que je ne comprends pas tout ou que je réponds à coté de la plaque ne te fais pas de soucis. Merci encore du temps consacré.

  6. #6
    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
    Sinon,

    Si le fichier txt "fichiers_des_donnees" est une trop grosse contrainte, le script powershell devra être capable de comparer les fichiers contenus dans le dossier 20220509153020_ARBUSTE avec le nom des fichiers contenus dans une certaine plage de données dans mon excel (ex: toute la colonne D à partir de la cellule D6)
    Il faudra que le nommage des fichiers respectent celui de l'excel avec ses regex.

    Je n'ai pas non plus mentionné mais l'idéal serait que dans le script pour les chemins de fichiers et dossiers ils soient précisés par le client car le script sera fourni à divers clients qui ne travailleront pas tous sous le même chemin (ex : c:/user/desktop/dossier ou d:/mesdocument/dossier)

  7. #7
    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
    - Si un pattern match plusieurs fichiers est ce une erreur ?
    Je ne comprends pas trop mais grosso modo chaque fichier sera différent il ne peut y avoir de fichiers similaires donc pour moi oui ce sera une erreur
    - Et bien tu peux avoir l'entré YYYYmmddHHMMSS_ARBUSTE_FICHE_POSTE_[A-Za-z0-9]{10}.pdf qui correspond avec 20220523084200_ARBUSTE_FICHE_POSTE_0123456789.pdf ou avec 20220523084200_ARBUSTE_FICHE_POSTE_1123456789.pdf
    - Aussi .* correspond a tout les fichiers



    - Quelle type de "joker" sont utilisées ? Tout ceux d'une expression régulière ? Uniquement cette forme [A-Za-z0-9]{10} ?
    Je ne comprends pas le mot "joker". Ce que je peux dire c'est que les regex ne seront pas toujours les mêmes. Il serait idéal que les noms de fichiers qu'indiquera le client dans le dossier
    20220509153020_ARBUSTE puissent subir soit une transformation en fonction de la regex indiquée dans "fichiers_des_donnees" soit une vérification et dire si oui ou non il y a une erreur de renommage
    - Je ne comprend pas trop l'histoire de la transformation. Essayons déjà de définir le besoin de vérification



    - De quelle langage est issue ce format de "timestamp" YYYYmmddHHMMSS ? Je ne sais pas du tout mais c'est une contrainte souhaitée et obligatoire dans le nommage des fichiers
    Si j'en crois un format de référence en C# : https://docs.microsoft.com/fr-fr/dot...format-strings
    YYYY N'existe pas il s'agit de l'année
    mm Minute, définie entre 00 et 59
    dd Jour du mois, de 01 à 31
    HH Heure, au format de 24 heures, de 00 à 23
    MM Mois, de 01 à 12
    SS N'existe pas il s'agit des secondes

    Le timestamp doit apparaître obligatoirement cela fait partie d'une contrainte de nommage des fichiers.

    J'espère avoir été plus précis dans mes réponses je débute vraiment en code donc si tu vois que je ne comprends pas tout ou que je réponds à coté de la plaque ne te fais pas de soucis. Merci encore du temps consacré.
    - Quelle est la contrainte ? Le fait qu'il y ait une vérification sur une date ou le formatage est imposé ?
    Si c'est le premier cas il serait judicieux d'utiliser un formatage standard.
    Si c'est le deuxième cas nous ferons avec mais l'expression de besoin serait à débattre.



    J'avance un peu dans ma tête et j'ai d'autres questions :
    1) La vérification doit elle être sensible à la casse ?
    2) La correspondante doit elle être "exacte" ou de type "contient" ?
    3.0) Comment reconnaitre une entré de type RegExp d'une entré littérale ?
    L'idéal serait que, mis à part le "timestamp" (qui est une date en vérité), chaque entrée soit une RegExp valide. Ce qui à l'air d'être le cas sur les exemples mais elle ne sont pas exactes (au vu des fichiers) :
    - YYYYmmddHHMMSS_ARBUSTE_EVLT_CARR.csv peut correspondre 20220523084200_ARBUSTE_EVLT_CARR.csv et 20220523084200_ARBUSTE_EVLT_CARR#csv par exemple.
    La RegExp valide exacte serait plutôt YYYYmmddHHMMSS_ARBUSTE_EVLT_CARR\.csv
    3.1) Peux tu nous assurer que les entrées soit des RegExp valide exacte ?
    Par exemple une entré de ce type YYYYmmddHHMMSS_ARBUSTE_EVLT_CARR[second.csv pour un fichier 20220523084200_ARBUSTE_EVLT_CARR[second.csv ressemble à une RegExp mais est invalide.
    Ce point rejoint le 3.0, chaque entré devra être une RegExp valide exacte. C'est à dire que tous les caractères littéraux appartenant aux caractères spéciaux interprétés + * ? ^ $ ( ) [ ] { } | \ par une RegExp devront être échappés
    Voir : https://docs.microsoft.com/fr-fr/dot...ar-expressions
    https://www3.ntu.edu.sg/home/ehchua/...to/Regexe.html

    Donc le principale problème est de savoir si l'entrée est une RegExp ou pas et elle doit être correctement formatée pour une correspondance pertinente

  8. #8
    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,



    Citation Envoyé par ericlm128 Voir le message
    - Et bien tu peux avoir l'entré YYYYmmddHHMMSS_ARBUSTE_FICHE_POSTE_[A-Za-z0-9]{10}.pdf qui correspond avec 20220523084200_ARBUSTE_FICHE_POSTE_0123456789.pdf ou avec 20220523084200_ARBUSTE_FICHE_POSTE_1123456789.pdf
    - Aussi .* correspond a tout les fichiers
    Il faudrait que les fichiers soient identiques en tout point




    - Je ne comprend pas trop l'histoire de la transformation. Essayons déjà de définir le besoin de vérification
    Très bien commençons par un moyen de vérification dans ce cas. La priorité est de déterminer si c'est exactement ce qui est écrit.




    - Quelle est la contrainte ? Le fait qu'il y ait une vérification sur une date ou le formatage est imposé ?
    Si c'est le premier cas il serait judicieux d'utiliser un formatage standard.
    Si c'est le deuxième cas nous ferons avec mais l'expression de besoin serait à débattre.
    En fait le formatage est imposé par mon fichier excel dont voici un extrait
    ^[0-9]{14}_ARBUSTE_GEST_RH\.csv
    ^[0-9]{14}_ARBUSTE_REF_COMP_MMA_ACTIVES\.csv
    ^[0-9]{14}_ARBUSTE_REF_COMP_DGA_ACTIVES\.csv
    ^[0-9]{14}_ARBUSTE_REF_COMP_DGA_INACTIVES\.csv
    ^[0-9]{14}_ARBUSTE_CV_[A-Za-z0-9_]+\.pdf
    ^[0-9]{14}_ARBUSTE_PLAN_ARME\.csv
    ^[0-9]{14}_ARBUSTE_FICHE_POSTE_[A-Za-z0-9]{10}\.pdf
    ^[0-9]{14}_ARBUSTE_EVLT_CARR\.csv




    J'avance un peu dans ma tête et j'ai d'autres questions :
    1) La vérification doit elle être sensible à la casse ? Oui s'il y a des majuscules ou minuscules alors respect de la casse
    2) La correspondante doit elle être "exacte" ou de type "contient" ?exacte
    3.0) Comment reconnaitre une entré de type RegExp d'une entré littérale ?
    L'idéal serait que, mis à part le "timestamp" (qui est une date en vérité), chaque entrée soit une RegExp valide. Ce qui à l'air d'être le cas sur les exemples mais elle ne sont pas exactes (au vu des fichiers) :
    - YYYYmmddHHMMSS_ARBUSTE_EVLT_CARR.csv peut correspondre 20220523084200_ARBUSTE_EVLT_CARR.csv et 20220523084200_ARBUSTE_EVLT_CARR#csv par exemple.
    La RegExp valide exacte serait plutôt YYYYmmddHHMMSS_ARBUSTE_EVLT_CARR\.csv
    3.1) Peux tu nous assurer que les entrées soit des RegExp valide exacte ?En effet, la regexp exacte est celle que tu indique avec le backslash final
    Par exemple une entré de ce type YYYYmmddHHMMSS_ARBUSTE_EVLT_CARR[second.csv pour un fichier 20220523084200_ARBUSTE_EVLT_CARR[second.csv ressemble à une RegExp mais est invalide.
    Ce point rejoint le 3.0, chaque entré devra être une RegExp valide exacte. C'est à dire que tous les caractères littéraux appartenant aux caractères spéciaux interprétés + * ? ^ $ ( ) [ ] { } | \ par une RegExp devront être échappés
    Voir : https://docs.microsoft.com/fr-fr/dot...ar-expressions
    https://www3.ntu.edu.sg/home/ehchua/...to/Regexe.html

    Donc le principale problème est de savoir si l'entrée est une RegExp ou pas et elle doit être correctement formatée pour une correspondance pertinente

    Comme indiqué dans un de mes messages envoyés pour être plus précis avec toi

    J'ai mon dossier 20220509153020_ARBUSTE qui contient des fichiers placés par mon client. Ces fichiers, plus précisément leurs nommages, doivent correspondre en tout point avec le nommage des fichiers contenus dans les cellules E6:E13 de mon fichier excel qui ceux-ci contiennent des regexp. Comme tu l'as mentionné je pense qu'il est préférable de procéder juste à une vérification et renvoyer un "n'est pas exact" s'il y a une erreur.
    ^[0-9]{14}_ARBUSTE_GEST_RH\.csv
    ^[0-9]{14}_ARBUSTE_REF_COMP_MMA_ACTIVES\.csv
    ^[0-9]{14}_ARBUSTE_REF_COMP_DGA_ACTIVES\.csv
    ^[0-9]{14}_ARBUSTE_REF_COMP_DGA_INACTIVES\.csv
    ^[0-9]{14}_ARBUSTE_CV_[A-Za-z0-9_]+\.pdf
    ^[0-9]{14}_ARBUSTE_PLAN_ARME\.csv
    ^[0-9]{14}_ARBUSTE_FICHE_POSTE_[A-Za-z0-9]{10}\.pdf
    ^[0-9]{14}_ARBUSTE_EVLT_CARR\.csv

    On peut oublier le fichier "fichier_des_donnees" qui est une extraction des lignes ci-dessus et travailler plutôt à partir du fichier excel. Le script irait ainsi lire cet excel directement.
    J'espère avoir été plus clair Eric

  9. #9
    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
    Lire dans un fichier excel est plus "cher" , je préfère passé par une librairie que d'utiliser les objets COM.
    Tu as un exemple du fichier Excel ?

    PS : Oui la ça ressemble plus à des RegExp même si cela ne valide pas une date correctes ni la fin ($ manquant)

  10. #10
    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 un premier jet simple, il faut modifier le chemin du fichier Excel (première ligne)

    Tu trouvera la dll zippé en pièce jointe. Il faut la poser dans le même dossier que ton script (.ps1)


    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 = "test.xlsx"
     
    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[0].Cells["E6:E13"] | Select-Object -ExpandProperty Text
    }
    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

    PS : La longueur des dates sont de 16 et pas 14 dans ton premier fichier transmit
    Fichiers attachés Fichiers attachés

  11. #11
    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
    Eric,

    Premier test effectué aucun résultat.

    J'ai bien récupéré le .dll et inséré dans mon dossier ou se situe le script. J'ai bien modifié la première ligne aussi. Pour la longueur je te confirme 14 caractères et ce sera toujours la même longueur. C'est une erreur de ma part.

    Je te mets le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Au caractère Sans titre2.ps1:124 : 20
    + Write-Host "`n`nFin"
    +                    ~
    Le terminateur " est manquant dans la chaîne.
        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString
    Je te mets un exemple de fichier Excel au plus réaliste que je peux. Tu verras les noms ne sont pas du tout les mêmes mais le principe attendu reste quand même. Ce qui va t’intéresser se trouve à l'onglet "caractéristiques techniques" colonne E

  12. #12
    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
    N'oublie de renseigner le chemin du fichier Excel.

    Donc le problème est que je prend le premier classeur et ce n'est pas le bon.


    Soit tu prend le classeur qui porte le nom Caractéristiques techniques
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    $regexps = $obj.Workbook.Worksheets["Caractéristiques techniques"].Cells["E6:E13"] | Select-Object -ExpandProperty Text


    Soit tu prend le énième classeur :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    $regexps = $obj.Workbook.Worksheets[4].Cells["E6:E13"] | Select-Object -ExpandProperty Text

  13. #13
    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
    Eric,

    J'ai réessayé. En effet il y a du mieux. J'ai bien modifié le chemin dans le script au niveau $excel_filename = "C:\Users\j.paul\Desktop\Classeur.xlsm"
    Dailleurs il faudra que le client puisse lui même rentré ce chemin car il sera différents en fonction de chaque client qui peuvent soit bosser sur un chemin du même type ou un tout autre chemin


    J'ai juste modifié le chiffre de l'onglet (worksheet)
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    $obj.Workbook.Worksheets[4].Cells["E6:E13"] | Select-Object -ExpandProperty Text
    J'ai mis 5 car une feuille est cachée. J'avais fait des test de mon coté et je me suis fait avoir lol


    Ensuite, voici le résultat obtenu :
    --------------------------------------------------------------------------------------
    Dossier à analyser *: C:\Users\j.paul\Desktop\Classeur\



    Fin
    --------------------------------------------------------------------------------------


    On dirait qu'il n'analyse pas et ne fait pas de comparatif pour faire remonter l'exactitude des nommages de fichiers ou l'inexactitude entre le contenu du dossier et la plage du fichier excel. En tout cas je ne vois rien qui se produit dans le powershell ISE.

    As tu une piste ? Ai-je fait une connerie ?

  14. #14
    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
    Est ce que tout ne serait pas simplement cohérent ?
    Je suis sur phone pour le moment....

  15. #15
    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'ai remarqué la cellule caché 4 fonctionne et non 5

  16. #16
    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
    Pareil je suis rentré chez moi j'ai effectué les tests de mon coté.

    J'ai toujours le même résultat. De plus j'ai effectué des modifications sur les noms de fichiers dans le dossier CLASSEUR.
    Ex : sur le premier fichier j'ai enlevé le R de CLASSEUR, j'ai egalement enlevé des chiffres de la regex ce qui normalement devrait remonter des erreurs. Or, c'est comme si l'analyse de comparaison ne se faisait pas


    Citation Envoyé par ericlm128 Voir le message
    J'ai remarqué la cellule caché 4 fonctionne et non 5

  17. #17
    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
    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 *:

  18. #18
    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
    Je récapitule pour qu'on soit sur la même longueur d'onde

    J'ai un dossier CLASSEUR dans lequel j'ai mon fichier excel le fichier .dll le script et le dossier CLASSEUR dans lequel j'ai mes fichiers .csv .pdf
    Pour l'instant, est ce que tu remarques une anomalie ?

    Ensuite, j'ai bien mis le nom du fichier excel y compris avec l'extension avec son chemin entier absolu

    J'ai effectué le test en changeant 5 par 4 dans le worksheet.

    Je ne vois pas du tout où se situe le problème.

    Ne pourrait-il pas y avoir une visualisation de l'analyse en temps réél en prenant chacun des fichiers du dossier CLASSEUR et effectuer visuellement la comparaison sur la meme ligne dans le prompt avec comme rapport soit ok soit non ok ? Je pense que sera plus parlant pour le testeur



    Citation Envoyé par saga974 Voir le message
    Pareil je suis rentré chez moi j'ai effectué les tests de mon coté.

    J'ai toujours le même résultat. De plus j'ai effectué des modifications sur les noms de fichiers dans le dossier CLASSEUR.
    Ex : sur le premier fichier j'ai enlevé le R de CLASSEUR, j'ai egalement enlevé des chiffres de la regex ce qui normalement devrait remonter des erreurs. Or, c'est comme si l'analyse de comparaison ne se faisait pas

  19. #19
    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 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"
        }
    }

  20. #20
    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
    Attention à l'extension de ton fichier Excel je vois du xlsx vs xlsm faut mettre la bonne

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