获得已存储为环境变量的文件的日期

问题描述 投票:0回答:1

我的下面的代码无法暂停,所以我看不到它是否起作用:

@Echo
for /f  "tokens=*" %%a in ('dir C:\Users\name\Downloads\ /b /od') do set newest=%%a
for %%a in (%newest%) do set FileDate=%~ta
pause

主要目的是将最新文件(每天)从SSRS服务移至Linux服务器(SFTP)。我正在存储要用作的日期:如果最新文件不等于今天的日期,请使用stop命令。

windows for-loop batch-file
1个回答
1
投票

以下批处理文件代码可用于根据在执行批处理文件时为使用的用户帐户配置的国家/地区定义的日期/时间格式,根据日期/时间格式,根据上次修改日期获取最新文件的上次修改日期和时间。

@echo off
for /F  "eol=| delims=" %%I in ('dir "%UserProfile%\Downloads\*" /A-D /B /O-D 2^>nul') do (
    set "NewestFileName=%UserProfile%\Downloads\%%I"
    for %%J in ("%UserProfile%\Downloads\%%I") do set "NewestFileDate=%%~tJ"
    goto FoundNewestFile
)
echo No file found in folder "%UserProfile%\Downloads".
goto :EOF

:FoundNewestFile
echo  Newest file: "%NewestFileName%"
echo Date of file: %NewestFileDate%
pause

注意:命令DIR使用使用的选项输出最新文件的文件名,首先输出无路径。因此,有必要在内部[[FOR循环中再次指定包含最新文件的目录路径,以获取用户的downloads文件夹中该文件的最后修改日期。否则,内部FOR将在执行批处理文件时在当前目录中搜索最新文件,而该文件很可能不是用户的下载目录,因此无法找到该文件并确定其最后修改日期。

为了了解所使用的命令及其工作方式,请打开command prompt窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。

    dir /?
  • echo /?
  • for /?
  • goto /?
  • pause /?
  • set /?
  • 阅读有关Using command redirection operators的Microsoft文章,以获取2>nul的解释。重定向运算符>必须在

    FOR

  • 命令行上使用脱字符号^进行转义,才能在执行命令FOR并执行嵌入的[ C0]在后台启动的单独命令过程中的命令行。
    © www.soinside.com 2019 - 2024. All rights reserved.