如何用PowerShell循环复制Excel文件并按日期递增重命名?
PowerShell批量复制文件并递增日期文件名
核心实现脚本
# 配置参数 $originalFile = "FileName 12.14.2022.xlsx" $daysToGenerate = 5 # 改成你需要生成的天数 # 提取文件名里的基础名称和日期 $fileNamePattern = "(.*?) (\d{2}\.\d{2}\.\d{4})\.xlsx" if ($originalFile -match $fileNamePattern) { $baseName = $matches[1] $dateStr = $matches[2] # 把日期字符串转成DateTime对象(指定格式避免区域设置坑) $currentDate = [DateTime]::ParseExact($dateStr, "MM.dd.yyyy", $null) # 循环生成对应日期的文件副本 for ($i = 0; $i -lt $daysToGenerate; $i++) { $newDate = $currentDate.AddDays($i) $newDateStr = $newDate.ToString("MM.dd.yyyy") $newFileName = "$baseName $newDateStr.xlsx" # 执行复制,-Force可以覆盖已存在的同名文件 Copy-Item -Path $originalFile -Destination $newFileName -Force Write-Host "已生成: $newFileName" } } else { Write-Error "没从文件名里找到符合MM.DD.YYYY格式的日期,请检查文件名结构" }
关键细节说明
- 参数调整:直接修改
$originalFile指定源文件路径(如果不在脚本同目录,要写全路径,比如C:\files\FileName 12.14.2022.xlsx),$daysToGenerate设置要生成的未来天数。 - 日期解析:用
ParseExact指定固定格式MM.dd.yyyy转换日期,避免系统区域设置导致的解析失败(比如部分系统默认是日/月/年格式,会把12.14当成无效日期报错)。 - 正则匹配:
(.*?) (\d{2}\.\d{2}\.\d{4})\.xlsx会精准拆分文件名的基础部分和日期部分,兼容带空格的文件名。
常见报错排查
之前报错大概率是这几个原因:
- 没指定日期解析格式,系统用默认区域格式解析导致失败;
- 正则表达式没匹配到正确的日期段,比如文件名格式不符合
名称 MM.DD.YYYY.xlsx的结构; - 源文件路径错误,脚本找不到要复制的文件。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

