You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PowerShell批量导出项目文件夹CSV及获取最新修改时间需求

PowerShell批量处理项目文件夹解决方案

一、批量导出每个项目文件夹的详细CSV

针对E:\Projects下的250个项目文件夹,基于你提供的单文件夹脚本,通过循环遍历实现批量导出,每个项目生成以自身ID命名的CSV文件:

# 定义项目根目录和CSV输出目录
$projectsRoot = "E:\Projects"
$outputDir = "C:\Setup"

# 创建输出目录(如果不存在)
if (-not (Test-Path $outputDir)) {
    New-Item -ItemType Directory -Path $outputDir | Out-Null
}

# 遍历所有项目文件夹
Get-ChildItem -Path $projectsRoot -Directory | ForEach-Object {
    $projectFolder = $_
    $projectName = $projectFolder.Name
    $csvPath = Join-Path -Path $outputDir -ChildPath "Results_$projectName.csv"

    # 递归遍历当前项目下的所有文件和文件夹,生成CSV
    Get-ChildItem -Path $projectFolder.FullName -Recurse | ForEach-Object {
        [PSCustomObject]@{
            "filePath"       = $_.FullName
            "Name"           = $_.Name
            "Last Modified"  = $_.LastWriteTime
            "Folder Name"    = $_.Directory.Name  # 替代原字符串拆分逻辑,更可靠
            "Extension"      = if ($_.PSIsContainer) { "Folder" } else { $_.Extension }
        }
    } | Export-Csv -Path $csvPath -NoTypeInformation -Encoding UTF8
}

关键优化点:

  • -Directory参数直接筛选项目根目录下的文件夹,避免处理无关文件
  • $_.Directory.Name替代原字符串拆分逻辑,获取父文件夹名称更稳定
  • 提前创建输出目录,避免导出时因目录不存在报错
  • 每个CSV文件以项目ID命名,方便后续对应查找

二、获取每个项目的最新修改时间,筛选2022年之前的归档项目

要判断哪些项目需要归档,递归获取每个项目内所有文件的最新修改时间,再与2022年1月1日对比:

$projectsRoot = "E:\Projects"
$cutoffDate = Get-Date "2022-01-01"

# 遍历所有项目文件夹,计算最新修改时间并筛选
Get-ChildItem -Path $projectsRoot -Directory | ForEach-Object {
    $projectFolder = $_
    # 递归获取所有文件的LastWriteTime,取最大值
    $latestWriteTime = Get-ChildItem -Path $projectFolder.FullName -Recurse -File | 
                       Measure-Object -Property LastWriteTime -Maximum | 
                       Select-Object -ExpandProperty Maximum

    # 如果项目下没有文件(只有文件夹),则用项目文件夹自身的LastWriteTime
    if (-not $latestWriteTime) {
        $latestWriteTime = $projectFolder.LastWriteTime
    }

    # 输出项目的归档状态
    [PSCustomObject]@{
        "项目ID"          = $projectFolder.Name
        "最新修改时间"    = $latestWriteTime
        "是否需要归档"    = if ($latestWriteTime -lt $cutoffDate) { "是" } else { "否" }
    }
} | Export-Csv -Path "C:\Setup\归档项目列表.csv" -NoTypeInformation -Encoding UTF8

关键说明:

  • -File参数只获取文件的修改时间(文件夹的修改时间无法准确代表内容更新)
  • Measure-Object直接计算最大的LastWriteTime,比手动遍历更高效
  • 处理空项目(仅含文件夹无文件)的情况,避免返回空值
  • 最终输出所有项目的归档状态,方便批量处理

内容的提问来源于stack exchange,提问作者Christopher Pye

火山引擎 最新活动