将目录中最近创建的csv文件的时间戳保存到变量中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将目录中最近创建的csv文件的时间戳保存到变量中相关的知识,希望对你有一定的参考价值。
我是批处理文件的新手,想要获取文件夹中某种类型的最新创建文件的时间戳,并将该时间戳存储在变量中。
到目前为止,这就是我所拥有的:
FOR /f %%i in ('dir /O:D /T:C /b *.csv') DO (set LAST=%%i
goto stop)
:stop
echo Last created file:%LAST%
输出是文件名,但我也需要时间戳。
答案
试试这个:
::@echo off
set LAST=
set TimeStamp=
FOR /f "tokens=1,2,4" %%i in ('dir /O:-D /T:C *.csv^|findstr .csv') DO (
set "LAST=%%k"
set "TimeStamp=%%i %%j"
goto stopfor
)
:stopfor
echo Last created file: %LAST%
echo Time Stamp: %TimeStamp%
在-
之前的D
是降序。
删除了-b
,因为它会抑制显示时间戳。
然后管道到findstr
只显示那些文件行。 (忽略摘要)
查看for /?
,dir /?
和findstr /?
了解更多信息。
另一种方式,无需管道到findstr
:
::@echo off
set LAST=
set TimeStamp=
FOR /f %%i in ('dir /O:-D /T:C /b *.csv') DO (
set "LAST=%%i"
set "TimeStamp=%%~ti"
goto stopfor
)
:stopfor
echo Last created file: %LAST%
echo Time Stamp: %TimeStamp%
另一答案
我已决定将此作为替代答案添加,以提供创建的时间戳,包括秒,即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
以上是关于将目录中最近创建的csv文件的时间戳保存到变量中的主要内容,如果未能解决你的问题,请参考以下文章