web-dev-qa-db-fra.com

Comment obtenir la dernière date de modification du fichier sur la ligne de commande Windows?

J'utilise la commande suivante pour obtenir la date du fichier. Cependant, la variable fileDate renvoie une valeur vide depuis que nous avons migré vers un autre serveur (Windows Server 2003).

FOR /f %%a in ('dir myfile.txt^|find /i " myfile.txt"') DO SET fileDate=%%a 

Existe-t-il un autre moyen plus fiable d'obtenir la date du fichier?

18
Ricky Supit

Changement % à %% pour une utilisation dans un fichier batch, pour %~ta syntaxe entrez call /?

for %a in (MyFile.txt) do set FileDate=%~ta
36
Andy Morris

Tu peux le faire

forfiles /M myfile.txt /C "cmd /c echo @fdate @ftime"
11
user2607028

Référence utile pour obtenir les propriétés d'un fichier à l'aide d'un fichier de commandes, la dernière heure de modification est incluse:

FOR %%? IN ("C:\somefile\path\file.txt") DO (
    ECHO File Name Only       : %%~n?
    ECHO File Extension       : %%~x?
    ECHO Name in 8.3 notation : %%~sn?
    ECHO File Attributes      : %%~a?
    ECHO Located on Drive     : %%~d?
    ECHO File Size            : %%~z?
    ECHO Last-Modified Date   : %%~t?
    ECHO Drive and Path       : %%~dp?
    ECHO Drive                : %%~d?
    ECHO Fully Qualified Path : %%~f?
    ECHO FQP in 8.3 notation  : %%~sf?
    ECHO Location in the PATH : %%~dp$PATH:?
)
7
PodTech.io

Cela fonctionne pour moi sur Vista. Quelques choses à essayer:

  1. Remplacez find par le chemin d'accès complet de la commande find. find est un nom d'outil courant. Il existe une recherche Unix très différente de la recherche intégrée de Windows. comme ça:
    FOR /f %%a in ('dir ^|%windir%\system32\find.exe /i "myfile.txt"') DO SET fileDate=%%a

  2. examinez la sortie de la commande dans une fenêtre cmd.exe. Pour ce faire, vous devez remplacer le %% par%.
    FOR /f %a in ('dir ^|c:\windows\system32\find.exe /i "myfile.txt"') DO SET fileDate=%a
    Cela peut vous donner quelques idées.

  3. Si cela apparaît comme vide, à nouveau, à l'invite de commandes, essayez ceci:

    dir | c:\windows\system32\find.exe /i "myfile.txt"

Cela devrait vous montrer ce que vous devez voir.

Si vous ne pouvez toujours pas le comprendre, modifiez votre message pour inclure ce que vous voyez à partir de ces commandes et quelqu'un vous aidera.

2
Cheeso

vous pouvez également obtenir une date de modification des fichiers en utilisant vbscript

Set objFS=CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
strFile= objArgs(0)
WScript.Echo objFS.GetFile(strFile).DateLastModified

enregistrez ce qui précède sous mygetdate.vbs et en ligne de commande

c:\test> cscript //nologo mygetdate.vbs myfile
1
ghostdog74

Quelle sortie (exactement) fait dir myfile.txt donner dans le répertoire courant? Que se passe-t-il si vous définissez les délimiteurs?

FOR /f "tokens=1,2* delims= " %%a in ('dir myfile.txt^|find /i " myfile.txt"') DO SET fileDate=%%a 

(notez l'espace après delims=)
(pour vous faciliter la vie, vous pouvez le faire à partir de la ligne de commande en remplaçant %%a avec %a)

Pour obtenir la dernière date/heure de modification d'un fichier d'une manière indépendante des paramètres régionaux , vous pouvez utiliser la commande wmic avec l'alias DataFile:

wmic DataFile where "Name='D:\\Path\\To\\myfile.txt'" get LastModified /VALUE

Notez que le chemin complet du fichier doit être fourni et que tous les séparateurs de chemin (barres obliques inverses \) doit être doublé ici.

Cela renvoie une valeur de date/heure standardisée comme celle-ci (ce qui signifie 12e d'août 2019, 13:00:00, UTC + 120 '):

LastModified=20190812130000.000000+120

Pour capturer la valeur date/heure, utilisez for /F , vous pouvez l'affecter à une variable à l'aide de set :

for /F "delims=" %%I in ('
    wmic DataFile where "Name='D:\\Path\\To\\myfile.txt'" get LastModified /VALUE
') do for /F "tokens=1* delims==" %%J in ("%%I") do set "DateTime=%%K"

La deuxième for /F loop évite les artefacts (comme les caractères orphelins de retour chariot) de la conversion de la sortie Unicode de wmic en texte ASCII/ANSI par le premier for /F loop (voir aussi cette réponse ).

Vous pouvez ensuite utiliser expansion de sous-chaîne pour en extraire la date pure ou l'heure:

set "DateOnly=%DateTime:~0,8%"
set "TimeOnly=%DateTime:~8,6%"

Pour obtenir la date/heure de création ou la dernière date/heure d'accès, il suffit de remplacer la propriété LastModified par CreationDate ou LastAccessed, respectivement. Pour obtenir des informations sur un répertoire plutôt que sur un fichier, utilisez l'alias FSDir au lieu de DataFile.

Pour spécifier des chemins/noms de fichiers (ou répertoires) contenant à la fois , et ), qui ne sont généralement pas acceptés par wmic, jetez un œil à cette question .

Consultez également cet article ainsi que celui-ci sur la façon d'obtenir les horodatages des fichiers et répertoires.

0
aschipfl