Я решил добавить это в качестве альтернативного ответа для предоставления созданной метки времени, включая секунды, т.е. yyyy/MM/dd @hh:mm:ss
.Метод определения файла не изменился, DIR
, я только что использовал утилиту командной строки WMI wmic.exe
, чтобы получить дату не зависящим от локали способом.
@Echo Off
If Not Exist *.csv Exit/B
For /F Delims^=^= %%A In ('Set _ 2^>Nul')Do Set "%%A="
For /F Delims^=^ EOL^= %%A In ('Dir/B/OD/TC *.csv 2^>Nul'
)Do If /I "%%~xA"==".csv" Set "_F=%__CD__%%%A"
For /F Delims^=^ EOL^= %%A In ('WMIC DataFile Where "Name='%_F:\=\\%'"^
Get CreationDate 2^>Nul')Do For %%B In (%%~nA)Do Set "_C=%%B"
If Not Defined _C Exit /B
Set "_C=%_C:~,4%/%_C:~4,2%/%_C:~6,2% @ %_C:~-6,2%:%_C:~-4,2%.%_C:~-2%"
If Defined _F Echo( Your latest file, %_F%, was created on %_C%&Pause
Если вам нужна только временная метка в качестве переменной, вы можете использовать более простые методы поиска.
Вы можете использовать powershell.exe
из своего пакетного файла, , что также обеспечивает точность секунд :
@For /F "Tokens=*" %%A In ('PowerShell -NoP^
"Ls *.csv|Sort CreationTime|Select CreationTime" 2^>Nul'
)Do @Set "CTS=%%A"
@Set CTS 2>Nul&&Pause
Эта версия предпочтительна, если в текущем каталоге имеется большое количество csv-файлов, и она даст вам способ управления -F
ormat результата) :
@For /F "Tokens=*" %%A In ('PowerShell -NoP^
"Ls . -Filt *.csv|Sort CreationTime -Des|Select -F 1 -Exp CreationTime|"^
"Date -F 'yyyy/MM/dd @hh:mm:ss'" 2^>Nul')Do @Set "CTS=%%A"
@Set CTS 2>Nul&&Pause
Или, если вы хотите придерживаться только cmd.exe
, вы удовлетворены тем, что дата и время всегда отображаются в виде первой и второй строк, разделенных пробелом команды DIR
, и ненужна более минутная точность, тогда я бы посоветовал вам использовать это:
@For /F "EOL= Delims=" %%A In ('Dir/OD/TC *.csv 2^>Nul'
)Do @If /I "%%~xA"==".csv" For /F "Tokens=1-2" %%B In ("%%A"
)Do @Set "CTS=%%B @%%C"
@Set CTS 2>Nul&&Pause