使用批处理文件中的日期检查不可预知的结果

时间:2017-05-09 01:53:27

标签: windows batch-file

您好:)我正在编写批处理文件以定期自动执行FTP传输。文件的名称和格式不会更改。但是,该文件中的数据每隔约10分钟由主机更新一次。我需要获取每个版本并将它们存储在同一目录(具有不同的名称)

代码的目的是:

  • 从服务器下载特定名称的文件,并使用添加到名称的时间戳保存。
  • 检查“日期已修改字段”
  • 中是否已存在具有相同值的文件
  • 如果存在此类文件,请将其删除。
  • 等待5分钟,然后重复。

到目前为止,我的批处理文件与此相当接近。我面临的问题是这个。大约一半时间保存具有相同“日期修改”值的两个文件。我相信错误发生在代码中,发现第二个最新和最新的文件没有产生预期的结果,这意味着文件没有标记为删除,因为它们应该是。我怀疑它与批处理文件执行的性质有关,我还不完全理解。

以下是我生成运行该文件一小时的结果示例: sample output。请注意,具有相同日期的几个文件包含两次,而其他文件仅包含一次。

感谢阅读和(如果你这样做)回答:)

最后这是我正在使用的代码。

@echo off
cls

:start
rem Find the currently newest file
for /F "delims=|" %%I IN ('dir "*.xml" /B /O:D') DO set SecondNewestFile=%%I

winscp.com /ini=nul /script=ten_minute_sync.txt

rem Find the "new" newest file
for /F "delims=|" %%J IN ('dir "*.xml" /B /O:D') DO set NewestFile=%%J

echo SecondNewestFile = %SecondNewestFile%
echo NewestFile = %NewestFile%

rem Count the number of files in the directory to determine if we need to check the date of the file
for /f %%A in ('dir "*.xml" /a-d-s-h /b ^| find /v /c ""') do set cnt=%%A
echo File count = %cnt%

if %cnt% gtr 1 (
    rem Check the dates of the files and if there is a duplicate, remove it.
    echo Checking dates of files

    for %%a IN (%SecondNewestFile%) do set DATE1=%%~ta
    for %%b IN (%NewestFile%) do set DATE2=%%~tb

    echo Date of the NewestFile is %DATE1%
    echo Date of the SecondNewestFile is %DATE2%

    if "%DATE1%"=="%DATE2%" (
        echo Deleting duplicate file
        del /F %NewestFile%
    )
)

rem Wait 5 minutes before executing the script again
echo "Waiting 5 minutes before checking again..."
timeout 300

goto start

0 个答案:

没有答案