批处理文件只复制一个最新的文件

Batch file to copy only the one newest file

我正在尝试找到一个好的方法:

  1. 文件是在存档文件夹中创建的,我们需要将它们复制到 FTP 文件夹
  2. FTP文件夹不保留文件(供应商拾取并删除它们)
  3. 相关文件遵循相同的命名约定,但它们不是任一目录中的唯一文件(例如 namingconvetion_date 是文件名)
  4. 我只想移动符合命名约定的最新文件

我们要避免的是"bug"存档中所有符合命名约定的文件都被移动,这会导致我们的供应商打印旧文件。

当前的复制命令使用命名约定*,由于上述错误,它不起作用。

示例文件格式:Vendor_MP_Summary02162015103001.csv 所以它是 MMDDYYYYHHMMSS 日期格式

确定最新版本的最简单方法是修改文件。

@echo off
    setlocal enableextensions disabledelayedexpansion

    for /f %%a in ('
        dir /o-d /b /a-d "Vendor_MP_Summary*.csv" 
        ^| (set /p "file=" ^& call echo("%%file%%"^)
    ') do set "lastFile=%%~a"

    echo %lastFile%

@echo off
    setlocal enableextensions disabledelayedexpansion

    for /f %%a in ('
        dir /o-d /b /a-d "Vendor_MP_Summary*.csv" 
    ') do set "lastFile=%%~a" & goto :found

:found
    echo %lastFile%

在这两个代码中,文件列表是在 for /f 命令中检索的,借助 dir 命令以按日期降序列出匹配文件,因此较新的文件是第一。仅从完整列表中检索此行

  • 在第一个代码中使用了一个指向 set /p 命令的管道,因此只从文件列表中检索一行并返回到 for /f

  • 在第二种情况下,完整列表返回到 for /f 并且在检索第一行后,goto 用于跳过处理列表的其余部分