- forum
- PowerShell
- Entraide pour les débutants
- Sélectionner des fichiers en comparant la date de création
Question
Sélectionner des fichiers en comparant la date de création
- Chln
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 4
- Remerciements reçus 0
il y a 2 ans 7 mois - il y a 2 ans 7 mois #32339
par Chln
Sélectionner des fichiers en comparant la date de création a été créé par Chln
Bonjour à tous,
Je sollicite votre aide car dans le cadre d'un petit projet je souhaite copier des fichiers d'un répertoire A vers un répertoire B, étant débutant je bloque sur un point.
Ma contrainte est la suivante: sur le répertoire A sont déposé de temps en temps des fichiers (plusieurs sur un même journée et qui contient des fichiers de jours précédents), cependant je ne sais pas le jour exact de la dépose de ces fichiers.
J'ai donc commencé un début de script Powershell qui vient parcourir mon répertoire et récupérer la date de création du dernier fichier .xlsx créé avec un format de date choisi (qui ne contient pas l'heure de création).
Une fois cette valeur récupérée je voudrais la comparer à l'intégralité des fichiers du répertoire A afin de stocker dans une variable de type $File uniquement les fichiers qui ont été créés le même jour que ce derniers fichiers pour ensuite pouvoir les copier dans mon répertoire B.
C'est là que je bloque, j'ai essayé d'utiliser la ligne de code suivante pour sélectionner mes fichiers en utilisant un where{} mais cela ne fonctionne pas.
Pour information le paramètre "CreationTime" me ressort la valeur sous le format @{CreationTime=27/05/2022 01:56:02}
La ligne " select @{n='CreationTime';e={$_.CreationTime.ToString('dd/MM/yyyy')}} " me permet d'avoir un format @{CreationTime=27/05/2022}
Mon idée est donc de rechercher l'élément de date pour le faire matcher avec les fichiers que je veux récuper.
Edit: Il m'est impossible d'utiliser la date du jour, je dois uniquement utiliser la date de création du dernier fichier.
Voilà j'espère que quelqu'un pourra m'aider .
Merci à tous.
Je sollicite votre aide car dans le cadre d'un petit projet je souhaite copier des fichiers d'un répertoire A vers un répertoire B, étant débutant je bloque sur un point.
Ma contrainte est la suivante: sur le répertoire A sont déposé de temps en temps des fichiers (plusieurs sur un même journée et qui contient des fichiers de jours précédents), cependant je ne sais pas le jour exact de la dépose de ces fichiers.
J'ai donc commencé un début de script Powershell qui vient parcourir mon répertoire et récupérer la date de création du dernier fichier .xlsx créé avec un format de date choisi (qui ne contient pas l'heure de création).
$Select_File=Get-ChildItem "$Export\*.xlsx"|Sort-Object {$_.CreationTime} | select-Object -last 1 | select @{n='CreationTime';e={$_.CreationTime.ToString('dd/MM/yyyy')}}
Une fois cette valeur récupérée je voudrais la comparer à l'intégralité des fichiers du répertoire A afin de stocker dans une variable de type $File uniquement les fichiers qui ont été créés le même jour que ce derniers fichiers pour ensuite pouvoir les copier dans mon répertoire B.
C'est là que je bloque, j'ai essayé d'utiliser la ligne de code suivante pour sélectionner mes fichiers en utilisant un where{} mais cela ne fonctionne pas.
$File=Get-ChildItem "$Export\*.xlsx"|Sort-Object {$_.CreationTime} | where {$_.CreationTime -match $Select_File} | Select-Object
Pour information le paramètre "CreationTime" me ressort la valeur sous le format @{CreationTime=27/05/2022 01:56:02}
La ligne " select @{n='CreationTime';e={$_.CreationTime.ToString('dd/MM/yyyy')}} " me permet d'avoir un format @{CreationTime=27/05/2022}
Mon idée est donc de rechercher l'élément de date pour le faire matcher avec les fichiers que je veux récuper.
Edit: Il m'est impossible d'utiliser la date du jour, je dois uniquement utiliser la date de création du dernier fichier.
Voilà j'espère que quelqu'un pourra m'aider .
Merci à tous.
Dernière édition: il y a 2 ans 7 mois par Chln.
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 2 ans 7 mois #32340
par Philippe
Réponse de Philippe sur le sujet Sélectionner des fichiers en comparant la date de création
salut Chln
pour que le match fonctionne dans ton where il faut faire une comparaison avec une valeur chaine de caractère, hors ta variable $select_file est un tableau de chaine !
voici une solution :
voici une autre solution :
pour que le match fonctionne dans ton where il faut faire une comparaison avec une valeur chaine de caractère, hors ta variable $select_file est un tableau de chaine !
voici une solution :
$Select_File = $Select_File.CreationTime
$File = Get-ChildItem "$Export\*.xlsx" | Sort-Object {$_.CreationTime} | where {$_.CreationTime -match $Select_File} | Select-Object
voici une autre solution :
$File = Get-ChildItem "$Export\*.xlsx" | Sort-Object {$_.CreationTime} | where {$_.CreationTime -match $Select_File.CreationTime} | Select-Object
Connexion ou Créer un compte pour participer à la conversation.
- Chln
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 4
- Remerciements reçus 0
il y a 2 ans 7 mois #32342
par Chln
Réponse de Chln sur le sujet Sélectionner des fichiers en comparant la date de création
Merci Philippe pour ta réponse.
Après test cela ne fonctionne pas, je pense que la problématique vient du fait que CreationTime renvoi une valeur sous ce format: @{CreationTime=02/06/2022 10:03:43} avec les heures minutes et secondes, cependant tous les fichiers ne sont pas créés exactement dans la même minutes ou la même heure, ce qui me rend impossible de faire matcher cette information. Il faudrait que je me base uniquement sur la date.
Une autre approche, j'ai essayé de tronquer le résultat de la date du dernier fichier créé au format 02/06/2022 dans une variable appelée "$Name_File_Split" afin de sélection de la manière suivante:
Sans succès non plus.
Après test cela ne fonctionne pas, je pense que la problématique vient du fait que CreationTime renvoi une valeur sous ce format: @{CreationTime=02/06/2022 10:03:43} avec les heures minutes et secondes, cependant tous les fichiers ne sont pas créés exactement dans la même minutes ou la même heure, ce qui me rend impossible de faire matcher cette information. Il faudrait que je me base uniquement sur la date.
Une autre approche, j'ai essayé de tronquer le résultat de la date du dernier fichier créé au format 02/06/2022 dans une variable appelée "$Name_File_Split" afin de sélection de la manière suivante:
$File=Get-ChildItem "$Export\*.xlsx"|Sort-Object {$_.CreationTime} | where {$_.CreationTime -match $Name_File_Split} | Select-Object
Sans succès non plus.
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 2 ans 7 mois - il y a 2 ans 7 mois #32343
par Philippe
Réponse de Philippe sur le sujet Sélectionner des fichiers en comparant la date de création
j'ai testé les deux précédentes solutions chez moi et elle fonctionne,
mais si on veux être logique, on doit comparer des choses identiques, soit dd/mm/aaaa avec dd/mm/aaaa
soit l'approche suivante :
mais si on veux être logique, on doit comparer des choses identiques, soit dd/mm/aaaa avec dd/mm/aaaa
soit l'approche suivante :
$File = Get-ChildItem "$Export\*.xlsx" | Sort-Object {$_.CreationTime} | where {$_.CreationTime.ToString('dd/MM/yyyy') -match $Select_File} | Select-Object
Dernière édition: il y a 2 ans 7 mois par Philippe.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 2 ans 7 mois - il y a 2 ans 7 mois #32344
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Sélectionner des fichiers en comparant la date de création
salut,
qq remarques rapido :
>>Pour information le paramètre "CreationTime" me ressort la valeur sous le format @{CreationTime=27/05/2022 01:56:02}
C'est l'opérateur -match qui transforme le type date en format string , du coup $Select_File est un PSObject qui contient une propriété de type date. Ensuite pour la relecture autant nommer la variable avec une information de date (du genre $DateOfSelectedFile).
Le test de date à partir d'un format String est à éviter je pense. Que se passera-t-il sur un OS English ? Peut être rien, mais il faut le tester pour le savoir...
>>cependant tous les fichiers ne sont pas créés exactement dans la même minutes ou la même heure,
Ne pas hésiter à analyser le type manipulé :
Donc $Date.Date permet de filtrer sur le jour uniquement, la partie heure:minute sera identique pour tous.
qq remarques rapido :
>>Pour information le paramètre "CreationTime" me ressort la valeur sous le format @{CreationTime=27/05/2022 01:56:02}
C'est l'opérateur -match qui transforme le type date en format string , du coup $Select_File est un PSObject qui contient une propriété de type date. Ensuite pour la relecture autant nommer la variable avec une information de date (du genre $DateOfSelectedFile).
Le test de date à partir d'un format String est à éviter je pense. Que se passera-t-il sur un OS English ? Peut être rien, mais il faut le tester pour le savoir...
>>cependant tous les fichiers ne sont pas créés exactement dans la même minutes ou la même heure,
Ne pas hésiter à analyser le type manipulé :
$date=get-date
$date|select *
#en passant voir aussi
$c=get-culture
$c.DateTimeFormat|select *
Donc $Date.Date permet de filtrer sur le jour uniquement, la partie heure:minute sera identique pour tous.
Tutoriels PowerShell
Dernière édition: il y a 2 ans 7 mois par Laurent Dardenne.
Connexion ou Créer un compte pour participer à la conversation.
- Chln
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 4
- Remerciements reçus 0
il y a 2 ans 7 mois - il y a 2 ans 7 mois #32353
par Chln
Réponse de Chln sur le sujet Sélectionner des fichiers en comparant la date de création
Bonjour,
Encore merci pour vos retours.
Après test je n'arrive toujours pas à sélectionner les fichiers du jour, voici ce que contient mon code:
Voici le résultat qui mes retourné:
Si je retire mon Where{} je me retrouve bien avec l'intégralité des fichiers de mon répertoire, si je rajoute ce paramètre, aucun objet ne met retourné (donc aucune sélection).
Encore merci pour vos retours.
Après test je n'arrive toujours pas à sélectionner les fichiers du jour, voici ce que contient mon code:
$Select_File = Get-ChildItem "$Export"|Sort-Object {$_.LastWriteTime} | select-Object -last 1 | select @{n='LastWriteTime';e={$_.LastWriteTime.ToString('dd/MM/yyyy')}} Write-Host "1) Lastwritetime dernier fichier créé:"
$Select_File Get-ChildItem "$Export" | Sort-Object {$_.LastWriteTime} | where {$_.LastWriteTime.ToString('dd/MM/yyyy') -match $Select_File} | Select-Object Write-Host "3) Lastwritetime dernier fichier créé: "$File
Voici le résultat qui mes retourné:
1) Lastwritetime dernier fichier créé: @{LastWriteTime=03/06/2022}
3) Lastwritetime dernier fichier créé:
Si je retire mon Where{} je me retrouve bien avec l'intégralité des fichiers de mon répertoire, si je rajoute ce paramètre, aucun objet ne met retourné (donc aucune sélection).
Dernière édition: il y a 2 ans 7 mois par Chln.
Connexion ou Créer un compte pour participer à la conversation.
- forum
- PowerShell
- Entraide pour les débutants
- Sélectionner des fichiers en comparant la date de création
Temps de génération de la page : 0.121 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Sélectionner des fichiers en comparant la date de création