Page 1 sur 1
Récupérer uniquement la date d'un fichier
Posté : lun. 19 juin 2017 15:34
par Mel14141
Bonjour,
Nouvelle sur le forum, je fais mes premiers pas en AutoIt.
J'aurai voulu savoir s'il existait une fonction qui récupérerait uniquement la date d'un fichier.
Aujourd'hui j'utilise la fonction "FileGetTime" qui me renvoie date et heure.
Existe-t-il une solution pour récupérer uniquement la date avec une autre fonction ou une autre solution permettant de récupérer que ce dont j'ai besoin sur la fonction que j'utilise actuellement ?
Merci à tous.
Re: Récupérer uniquement la date d'un fichier
Posté : lun. 19 juin 2017 15:40
par jguinch
Il suffit de supprimer l'heure de la chaîne de caractères :
Re: Récupérer uniquement la date d'un fichier
Posté : lun. 19 juin 2017 15:51
par Mel14141
Super, c'est exactement ce que je cherchais.
Je fais ensuite une comparaison avec la date du jour, si c'est la même alors je copie ailleurs. Mais ça ne fonctionne pas, j'ai comme l'impression que mon "_NowDate" est vide.
Si je l'affiche avec un "MsgBox($MB_SYSTEMMODAL, "", "la date du jour est " & _NowDate)" ça me retourne rien.
Re: Récupérer uniquement la date d'un fichier
Posté : lun. 19 juin 2017 16:45
par jguinch
Quand tu exécutes une fonction, il faut utiliser les parenthèses :
Pour ce dont tu as besoin, tu peux aussi faire comme ça :
Re: Récupérer uniquement la date d'un fichier
Posté : mar. 20 juin 2017 09:12
par Mel14141
Ah oui effectivement ça marche aussi.
Une autre question si cela ne te dérange pas.
J'arrive bien à copier mes fichiers mais j'ai un petit soucis.
Je compare la date des fichiers à la date du jour et si elles sont égales alors je copie vers mon nouveau répertoire.
Je dois copier tous les fichiers du jour de type "File*.txt"
Cependant, depuis mon fichier source j'ai plusieurs "File*.txt" et pas tous à la date du jour, donc il ne faut pas que je les copie.
Aujourd'hui soit il copie tout, soit rien. Il n'y a pas de trie.
Je te mets mon code si cela peut t'aider.
#include <MsgBoxConstants.au3>#include <FileConstants.au3>#include <Date.au3>Example
()Func Example
() ; Crée une constante locale du chemin du fichier qui sera lu. Local Const $sFilePath = "C:\File*.txt" Local Const $newFilePath = "C:\Test" MsgBox($MB_SYSTEMMODAL, "", "test " & $sFilePath) Local $DateFic = FileGetTime ($sFilePath,1,1) Local $sDate = StringTrimRight($DateFic, 6) MsgBox($MB_SYSTEMMODAL, "", "Le(s) fichier(s) " & $sFilePath & " à la date " & $sDate) MsgBox($MB_SYSTEMMODAL, "", "la date du jour est " & _NowDate() ) Local $iFileExists = FileExists($sFilePath) ; Affiche si le fichier existe ou pas. If $iFileExists Then if ($sDate == @YEAR & @MON & @MDAY) Then MsgBox($MB_SYSTEMMODAL, "", "Le fichier existe." & @CRLF & "FileExist a retourné: " & $iFileExists) Local $newFileExists = FileCopy ($sFilePath,$newFilePath,$FC_OVERWRITE ) MsgBox($MB_SYSTEMMODAL, "", "Copie du fichier " & $newFileExists) Else MsgBox($MB_SYSTEMMODAL, "", "Fichier(s) trop ancien(s)") EndIf Else MsgBox($MB_SYSTEMMODAL, "", "Le fichier n'existe pas." & @CRLF & "FileExist a retourné: " & $iFileExists) EndIfEndFunc
Re: Récupérer uniquement la date d'un fichier
Posté : mer. 21 juin 2017 08:46
par Mel14141
jguinch a écrit : ↑lun. 19 juin 2017 16:45
Quand tu exécutes une fonction, il faut utiliser les parenthèses :
Pour ce dont tu as besoin, tu peux aussi faire comme ça :
Une autre question si cela ne te dérange pas.
J'arrive bien à copier mes fichiers mais j'ai un petit soucis.
Je compare la date des fichiers à la date du jour et si elles sont égales alors je copie vers mon nouveau répertoire.
Je dois copier tous les fichiers du jour de type "File*.txt"
Cependant, depuis mon fichier source j'ai plusieurs "File*.txt" et pas tous à la date du jour, donc il ne faut pas que je les copie.
Aujourd'hui soit il copie tout, soit rien. Il n'y a pas de trie.
Je te mets mon code si cela peut t'aider.
Code : Tout sélectionner
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>
#include <Date.au3>
Example()
Func Example()
; Crée une constante locale du chemin du fichier qui sera lu.
Local Const $sFilePath = "C:\File*.txt"
Local Const $newFilePath = "C:\Test"
MsgBox($MB_SYSTEMMODAL, "", "test " & $sFilePath)
Local $DateFic = FileGetTime ($sFilePath,1,1)
Local $sDate = StringTrimRight($DateFic, 6)
MsgBox($MB_SYSTEMMODAL, "", "Le(s) fichier(s) " & $sFilePath & " à la date " & $sDate)
MsgBox($MB_SYSTEMMODAL, "", "la date du jour est " & _NowDate() )
Local $iFileExists = FileExists($sFilePath)
; Affiche si le fichier existe ou pas.
If $iFileExists Then
if ($sDate == @YEAR & @MON & @MDAY) Then
MsgBox($MB_SYSTEMMODAL, "", "Le fichier existe." & @CRLF & "FileExist a retourné: " & $iFileExists)
Local $newFileExists = FileCopy ($sFilePath,$newFilePath,$FC_OVERWRITE )
MsgBox($MB_SYSTEMMODAL, "", "Copie du fichier " & $newFileExists)
Else
MsgBox($MB_SYSTEMMODAL, "", "Fichier(s) trop ancien(s)")
EndIf
Else
MsgBox($MB_SYSTEMMODAL, "", "Le fichier n'existe pas." & @CRLF & "FileExist a retourné: " & $iFileExists)
EndIf
EndFunc
Re: Récupérer uniquement la date d'un fichier
Posté : mer. 21 juin 2017 11:31
par walkson
Bonjour,
Vous ne pouvez pas écrire
Local Const $sFilePath = "C:\File*.txt"
car ce fichier n'existe pas.
Regardez
https://www.autoitscript.fr/forum/viewt ... =3&t=14573 ou encore
https://www.autoitscript.fr/forum/viewt ... =3&t=14544 dont les posts sont proches de votre problème
Re: Récupérer uniquement la date d'un fichier
Posté : lun. 26 juin 2017 15:24
par Mel14141
Bonjour Walkson,
Merci pour ta réponse cependant cela fonctionne bien.
Je ne suis peut être pas assez clair :
Dans un dossier j'ai une liste de fichier du type "File*.txt" ("*" peut être un chiffre, des lettres ...).
Je voudrais vérifier qu'un des fichiers de ce type est à la date du jour
Si un fichier de ce type est à la date du jour alors je le copie dans un autre répertoire.
J'ai beaucoup de mal à faire ma vérification sur la date du jour.
Re: Récupérer uniquement la date d'un fichier
Posté : lun. 26 juin 2017 17:34
par walkson
Bonjour,
Mel14141 a écrit : ↑lun. 26 juin 2017 15:24
Merci pour ta réponse cependant cela fonctionne bien.
Ben là c'est magic
Il est d'ailleurs impossible de créer un fichier avec ce nom "File*.txt"
En reprenant un exemple dans les liens que je vous avais donnés:
- Je liste tous les fichiers dans le dossier
- En bouclant sur l'array, je contrôle les dates pour une action
Re: Récupérer uniquement la date d'un fichier
Posté : lun. 26 juin 2017 22:12
par mikell
Pour ce genre de recherche/tri simple, ça peut se faire "à l'ancienne"
Note que dans ce cas, la wildcard est acceptée dans
FileFindFirstFile("C:\File*.txt")
$path = @desktopdir
& "\"$newpath = @desktopdir & "\test\"$hSearch = FileFindFirstFile($path & "File*.txt")If $hSearch = -1 Then MsgBox(0, "", "rien trouvé")Local $FileName = "", $n = 0While 1 $FileName = FileFindNextFile($hSearch) If @error Then ExitLoop $sFilePath = $path & $FileName $DateFic = StringTrimRight(FileGetTime($sFilePath, 1, 1), 6) If $DateFic = @YEAR & @MON & @MDAY Then FileCopy($sFilePath, $newpath, 9) $n += 1 EndIfWEndFileClose($hSearch)MsgBox(0, "", $n & " nouveaux fichiers copiés")
Re: Récupérer uniquement la date d'un fichier
Posté : mer. 28 juin 2017 14:50
par Mel14141
mikell a écrit : ↑lun. 26 juin 2017 22:12
Pour ce genre de recherche/tri simple, ça peut se faire "à l'ancienne"
Note que dans ce cas, la wildcard est acceptée dans
FileFindFirstFile("C:\File*.txt")
$path = @desktopdir
& "\"$newpath = @desktopdir & "\test\"$hSearch = FileFindFirstFile($path & "File*.txt")If $hSearch = -1 Then MsgBox(0, "", "rien trouvé")Local $FileName = "", $n = 0While 1 $FileName = FileFindNextFile($hSearch) If @error Then ExitLoop $sFilePath = $path & $FileName $DateFic = StringTrimRight(FileGetTime($sFilePath, 1, 1), 6) If $DateFic = @YEAR & @MON & @MDAY Then FileCopy($sFilePath, $newpath, 9) $n += 1 EndIfWEndFileClose($hSearch)MsgBox(0, "", $n & " nouveaux fichiers copiés")
Salut Mikell,
J'ai testé ton code, il ne trouve jamais de fichier même si je les crée à la main pour être sur qu'il en existe bien un.
As-tu une idée ?
Merci pour ta participation en tout cas.
Re: Récupérer uniquement la date d'un fichier
Posté : mer. 28 juin 2017 21:26
par mikell
Vérifie les chemins, il faut adapter le code avec tes données à toi. Par exemple en mettant les chemins de ton code du post #5 ça donne :
$path = "C:\"
$newpath = "C:\test\"
et FileFindFirstFile($path & "File*.txt") détecte les fichiers du genre "C:\File123.txt", "C:\FileABC.txt", etc
Re: Récupérer uniquement la date d'un fichier
Posté : ven. 30 juin 2017 12:03
par Mel14141
mikell a écrit : ↑mer. 28 juin 2017 21:26
Vérifie les chemins, il faut adapter le code avec tes données à toi. Par exemple en mettant les chemins de ton code du post #5 ça donne :
$path = "C:\"
$newpath = "C:\test\"
et FileFindFirstFile($path & "File*.txt") détecte les fichiers du genre "C:\File123.txt", "C:\FileABC.txt", etc
Bonjour mikell,
J'ai réussi à faire ce que je voulais encore merci.
J'ai une question tout autre.
Comment puis-je faire pour lister les sous-dossiers d'un dossier avec autoit ?
Merci d'avance
Re: Récupérer uniquement la date d'un fichier
Posté : ven. 30 juin 2017 14:01
par mikell
Pour une recherche sur plusieurs niveaux, regarde dans l'aide la fonction _FileListToArrayRec