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.
dir
is insanity at best. Side note: In a batch file, double the%
signs. – Banjo