批处理文件只复制一个最新的文件
Batch file to copy only the one newest file
我正在尝试找到一个好的方法:
- 文件是在存档文件夹中创建的,我们需要将它们复制到 FTP 文件夹
- FTP文件夹不保留文件(供应商拾取并删除它们)
- 相关文件遵循相同的命名约定,但它们不是任一目录中的唯一文件(例如 namingconvetion_date 是文件名)
- 我只想移动符合命名约定的最新文件
我们要避免的是"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
用于跳过处理列表的其余部分
我正在尝试找到一个好的方法:
- 文件是在存档文件夹中创建的,我们需要将它们复制到 FTP 文件夹
- FTP文件夹不保留文件(供应商拾取并删除它们)
- 相关文件遵循相同的命名约定,但它们不是任一目录中的唯一文件(例如 namingconvetion_date 是文件名)
- 我只想移动符合命名约定的最新文件
我们要避免的是"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
用于跳过处理列表的其余部分