You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PowerShell按日期筛选合并CSV文件并导出至指定文件夹

你的需求完全可以实现,不过当前用Group-Object生成布尔键哈希表的思路有点绕——分组操作会把不符合条件的文件也一并加载到内存里,属于多余步骤,直接加过滤条件捞取目标文件再处理即可,逻辑更简单、执行效率也更高。

实现注意事项

针对你刚接触PowerShell的情况,先明确几个容易踩坑的点:

  • 如果要扫描多个文件夹,直接把所有源文件夹路径以数组形式传给Get-ChildItem即可,需要递归扫子文件夹就加-Recurse参数
  • 一定要加-Filter *.csv和-File参数,避免把文件夹、其他格式的文件纳入处理范围
  • 合并CSV不要直接拼接文本内容,用原生Import-Csv读取结构化数据再统一导出,能避免多文件表头重复、列顺序错乱的问题
  • 你当前代码用的CreationTime是文件的创建时间,如果实际业务要按文件最后修改时间筛选,换成LastWriteTime属性更符合常规使用场景
参考代码

你可以直接用下面的脚本,把开头配置区的路径、时间阈值改成自己的实际值即可:

# ========== 配置区 按需修改 ==========
$sourcePathList = @("C:\Folder1", "C:\Folder2", "C:\Folder3")  # 所有需要扫描的源文件夹路径
$targetSavePath = "D:\MergedResult"  # 合并后文件的存放目标文件夹
$lastDays = 7  # 筛选最近N天内的文件,测试时可以改成2
$exportFileName = "Merged_Result_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv"  # 导出文件名带时间戳,避免覆盖旧文件
# ====================================

# 目标文件夹不存在时自动创建
if (-not (Test-Path $targetSavePath)) {
    New-Item -Path $targetSavePath -ItemType Directory -Force | Out-Null
}

# 筛选文件、合并内容、导出结果
Get-ChildItem -Path $sourcePathList -Filter *.csv -File |
    Where-Object { $_.CreationTime -ge (Get-Date).AddDays(-$lastDays) } |
    ForEach-Object { Import-Csv -Path $_.FullName } |
    Export-Csv -Path (Join-Path $targetSavePath $exportFileName) -NoTypeInformation -Encoding UTF8
额外场景说明

如果你的需求不是合并CSV内容,只是把符合日期条件的CSV文件原封不动复制到目标文件夹,不需要做内容导入导出,把上面最后一段处理逻辑替换成下面的代码即可:

Get-ChildItem -Path $sourcePathList -Filter *.csv -File |
    Where-Object { $_.CreationTime -ge (Get-Date).AddDays(-$lastDays) } |
    Copy-Item -Destination $targetSavePath -Force

内容的提问来源于stack exchange,提问作者Luke Shurtleff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 17:06:25