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

时间:2015-02-16 15:59:58

标签: batch-file

我试图想出一个很好的方法:

  1. 文件在存档文件夹中创建,我们需要将它们复制到FTP文件夹
  2. FTP文件夹不保留文件(供应商选择并删除它们)
  3. 相关文件遵循相同的命名约定,但它们不是任一目录中的唯一文件(例如,namingconvetion_date是文件名)
  4. 我只想要一个与命名约定匹配的最新文件
  5. 我们要避免的是一个" bug"存档中与命名约定匹配的所有文件都会被移动,这会导致我们的供应商打印旧文件。

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

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

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

1 个答案:

答案 0 :(得分:2)

@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用于跳过处理列表的其余部分

    < / LI>