将目录中最新创建的csv文件的时间戳保存到变量中

时间:2019-02-28 16:36:59

标签: batch-file

我是批处理文件的新手,想在文件夹中获取最新创建的某种类型文件的时间戳,并将该时间戳存储在变量中。

到目前为止,这就是我所拥有的:

FOR /f %%i in ('dir /O:D /T:C /b *.csv') DO (set LAST=%%i
    goto stop)

:stop

echo Last created file:%LAST%

输出是文件名,但我也需要时间戳。

2 个答案:

答案 0 :(得分:0)

尝试一下:

::@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%

答案 1 :(得分:0)

我已决定将其添加为替代答案,以提供创建的时间戳,包括秒,即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格式的方法,则该版本将是可取的。

@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