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 :
Local $sDate = FileGetTime ( @ScriptFullPath, 0, 1)
$sDate = StringTrimRight($sDate, 6)
ConsoleWrite($sDate)

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 :
MsgBox($MB_SYSTEMMODAL, "", "la date du jour est " & _NowDate() )
Pour ce dont tu as besoin, tu peux aussi faire comme ça :
If $sDate = @YEAR & @MON & @MDAY Then
   ; FileCopy(.....)
Else
   ; ....s
EndIf

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)
    EndIf

EndFunc

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 :
MsgBox($MB_SYSTEMMODAL, "", "la date du jour est " & _NowDate() )
Pour ce dont tu as besoin, tu peux aussi faire comme ça :
If $sDate = @YEAR & @MON & @MDAY Then
   ; FileCopy(.....)
Else
   ; ....s
EndIf
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
walkson a écrit : mer. 21 juin 2017 11:31 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
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 :shock:
Local Const $sFilePath = "C:\File*.txt"
Local $iFileExists = FileExists($sFilePath)
MsgBox($MB_SYSTEMMODAL, "contrôle", $iFileExists )
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
#include <Array.au3>
#include <File.au3>
$sFilePath = @DesktopDir
$aArray = _FileListToArray($sFilePath, "*.txt", $FLTA_FILES, True)
If Not IsArray($aArray) Then Exit MsgBox(0,"","pas trouvé")
_ArrayDisplay($aArray)

        For $i = 1 To $aArray[0]
                $ArrayTime = FileGetTime ($aArray[$i],$FT_MODIFIED )
                        If $ArrayTime[2] = @MDAY And $ArrayTime[1] = @MON And $ArrayTime[0] = @YEAR Then
                     ;Action
                     ConsoleWrite("y a =>" & $aArray[$i] &"  "& $ArrayTime[2] &":"& $ArrayTime[1] &":"& $ArrayTime[0] & @CRLF)
                     ;Résultat écrit dans la console
                  Else
                     ConsoleWrite("y a pas =>" & $aArray[$i] &"  "& $ArrayTime[2] &":"& $ArrayTime[1] &":"& $ArrayTime[0] & @CRLF)
                  EndIf

        Next

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" :mrgreen:
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 = 0
While 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
    EndIf
WEnd
FileClose($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" :mrgreen:
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 = 0
While 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
    EndIf
WEnd
FileClose($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