将目录中最近创建的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文件并且将为您提供控制结果的-Format的方法,那么此版本将更可取:

@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文件的时间戳保存到变量中的主要内容,如果未能解决你的问题,请参考以下文章

将当前时间分配给powershell变量

如何通过批处理文件中的时间戳识别/获取文件?

将记录添加到表中时记录的日期/时间戳? [复制]

如何将 pandas 时间戳添加到数据帧 post read_csv

将 WordSearch 生成器变量保存到 CSV 文件

如何将 .csv 文件保存到具有新文件名的目录