Récupérer uniquement la date d'un fichier

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Mel14141
Niveau 1
Niveau 1
Messages : 7
Enregistré le : lun. 19 juin 2017 14:41
Status : Hors ligne

Récupérer uniquement la date d'un fichier

#1

Message 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.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: Récupérer uniquement la date d'un fichier

#2

Message 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)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Mel14141
Niveau 1
Niveau 1
Messages : 7
Enregistré le : lun. 19 juin 2017 14:41
Status : Hors ligne

Re: Récupérer uniquement la date d'un fichier

#3

Message 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.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: Récupérer uniquement la date d'un fichier

#4

Message 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
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Mel14141
Niveau 1
Niveau 1
Messages : 7
Enregistré le : lun. 19 juin 2017 14:41
Status : Hors ligne

Re: Récupérer uniquement la date d'un fichier

#5

Message 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
Mel14141
Niveau 1
Niveau 1
Messages : 7
Enregistré le : lun. 19 juin 2017 14:41
Status : Hors ligne

Re: Récupérer uniquement la date d'un fichier

#6

Message 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
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Récupérer uniquement la date d'un fichier

#7

Message 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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Mel14141
Niveau 1
Niveau 1
Messages : 7
Enregistré le : lun. 19 juin 2017 14:41
Status : Hors ligne

Re: Récupérer uniquement la date d'un fichier

#8

Message 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.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Récupérer uniquement la date d'un fichier

#9

Message 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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Récupérer uniquement la date d'un fichier

#10

Message 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")
 
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Mel14141
Niveau 1
Niveau 1
Messages : 7
Enregistré le : lun. 19 juin 2017 14:41
Status : Hors ligne

Re: Récupérer uniquement la date d'un fichier

#11

Message 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.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Récupérer uniquement la date d'un fichier

#12

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Mel14141
Niveau 1
Niveau 1
Messages : 7
Enregistré le : lun. 19 juin 2017 14:41
Status : Hors ligne

Re: Récupérer uniquement la date d'un fichier

#13

Message 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
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Récupérer uniquement la date d'un fichier

#14

Message par mikell »

Pour une recherche sur plusieurs niveaux, regarde dans l'aide la fonction _FileListToArrayRec
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre