How to get file's last modified date on Windows command line?

前端 未结 8 1548
星月不相逢
星月不相逢 2020-12-01 04:16

I have been using the following command to get the file date. However, the fileDate variable has been returning blank value ever since we moved to a different s

相关标签:
8条回答
  • 2020-12-01 04:28

    you can get a files modified date using vbscript too

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

    save the above as mygetdate.vbs and on command line

    c:\test> cscript //nologo mygetdate.vbs myfile
    
    0 讨论(0)
  • 2020-12-01 04:32

    What output (exactly) does dir myfile.txt give in the current directory? What happens if you set the delimiters?

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

    (note the space after delims=)
    (to make life easier, you can do this from the command line by replacing %%a with %a)

    0 讨论(0)
  • 2020-12-01 04:32

    You could try the 'Last Written' time options associated with the DIR command

    /T:C -- Creation Time and Date
    /T:A -- Last Access Time and Date
    /T:W -- Last Written Time and Date (default)

    DIR /T:W myfile.txt
    

    The output from the above command will produce a variety of additional details you probably wont need, so you could incorporate two FINDSTR commands to remove blank lines, plus any references to 'Volume', 'Directory' and 'bytes':

    DIR /T:W myfile.txt | FINDSTR /v "^$" | FINDSTR /v /c:"Volume" /c:"Directory" /c:"bytes"
    

    Attempts to incorporate the blank line target (/c:"^$" or "^$") within a single FINDSTR command fail to remove the blank lines (or produce other errors) when the results are output to a text file.

    This is a cleaner command:

    DIR /T:W myfile.txt | FINDSTR /c:"/"
    
    0 讨论(0)
  • 2020-12-01 04:36

    Change % to %% for use in batch file, for %~ta syntax enter call /?

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

    Sample output:

    for %a in (MyFile.txt) do set FileDate=%~ta
    set FileDate=05/05/2020 09:47 AM
    
    for %a in (file_not_exist_file.txt) do set FileDate=%~ta
    set FileDate=
    
    0 讨论(0)
  • 2020-12-01 04:38

    To get the last modification date/time of a file in a locale-independent manner you could use the wmic command with the DataFile alias:

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

    Regard that the full path to the file must be provided and that all path separators (backslashes \) must be doubled herein.

    This returns a standardised date/time value like this (meaning 12th of August 2019, 13:00:00, UTC + 120'):

    LastModified=20190812130000.000000+120
    

    To capture the date/time value use for /F, then you can assign it to a variable using 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"
    

    The second for /F loop avoids artefacts (like orphaned carriage-return characters) from conversion of the Unicode output of wmic to ASCII/ANSI text by the first for /F loop (see also this answer).

    You can then use sub-string expansion to extract the pure date or the time from this:

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

    To get the creation date/time or the last access date/time, just replace the property LastModified by CreationDate or LastAccessed, respectively. To get information about a directory rather than a file, use the alias FSDir instead of DataFile.

    For specifying file (or directory) paths/names containing both , and ), which are usually not accepted by wmic, take a look at this question.

    Check out also this post as well as this one about how to get file and directory date/time stamps.

    0 讨论(0)
  • 2020-12-01 04:39

    Useful reference to get file properties using a batch file, included is the last modified time:

    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:?
    )
    
    0 讨论(0)
提交回复
热议问题