求Batch Script:仅复制同ID同周最高版本的目标文件
批量复制同ID同周最新版本文件的批处理脚本
现有文件命名遵循[ID]_[Week]_[Version]_[Othertext]格式,同一ID与Week组合下,Version数值越大对应文件越新。之前的做法是全量复制所有相关文件后手动删除旧版,以下脚本可直接复制每个ID+Week组里的最新版本文件:
@echo off setlocal enabledelayedexpansion :: 源文件夹路径,按需修改 set "sourceDir=\\server\folder\subfolder" :: 目标文件夹路径,按需修改 set "targetDir=C:\folder" :: 自动创建目标文件夹(不存在时) if not exist "%targetDir%" mkdir "%targetDir%" :: 遍历源文件夹下符合命名规则的文件 for /f "delims=" %%f in ('dir /b /a-d "%sourceDir%\*_*_*_*.csv"') do ( :: 拆分文件名,提取ID、Week、Version字段 for /f "tokens=1,2,3 delims=_" %%a in ("%%~nf") do ( set "currentID=%%a" set "currentWeek=%%b" set "currentVer=%%c" set "key=!currentID!_!currentWeek!" :: 记录每个ID+Week组合的最高版本文件 if not defined maxVer[!key!] ( set "maxVer[!key!]=!currentVer!" set "latestFile[!key!]=%%f" ) else ( if !currentVer! gtr !maxVer[!key!]! ( set "maxVer[!key!]=!currentVer!" set "latestFile[!key!]=%%f" ) ) ) ) :: 执行最新文件的复制操作 for /f "tokens=2 delims==" %%v in ('set latestFile[') do ( copy "%sourceDir%\%%v" "%targetDir%\" echo 已复制最新文件: %%v ) echo 所有最新文件复制完成 pause
关键说明
- 启用
enabledelayedexpansion实现循环内变量的实时更新 - 用
ID_Week作为唯一标识,对比记录每个组的最高Version对应的文件 - 可根据实际需求调整:
- 修改
sourceDir和targetDir为真实路径 - 若文件后缀不是csv,替换
dir命令中的*.csv为对应后缀(或*.*匹配所有格式)
- 修改
内容的提问来源于stack exchange,提问作者suraround
相关产品推荐
相关产品推荐

