Essaie aussi de fermer le fichier Excel pour voir
Essaie aussi de fermer le fichier Excel pour voir
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
---------------------------------------------------------------------------------------------------
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")
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
J'utilise cette colonne : Regex du fichier.
a revoir le fichier il n'existe pas le nom du fichier exact
Sinon tu pourrais renvoyer le fichier Excel + l'arbo parce que j'ai seulement l'ancienne
Tu remplace toute la boucle foreach
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 foreach($filename in $filenames) { .... }
1)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
Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 powershell.exe -executionpolicy unrestricted -force yes Set-ExecutionPolicy RemoteSigned
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
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"
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)
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
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
Ah il en reste 1 alors ! 😋
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
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
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
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager