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

PowerShell批量迁移Reports文件夹并按父级Asset名重命名的问题

解决方案:批量迁移并重命名Reports文件夹

你的核心需求是把所有层级下的Reports文件夹(对应Job>Asset>Reports结构)合并到单个目录,并将每个Reports重命名为其父级Asset的名称。原脚本失败的原因是管道传递的是源文件夹对象,而非复制后的新文件夹,导致Rename-Item错误地尝试修改原路径的文件夹,而非目标目录下的新副本。

修正后的脚本(一步到位)

直接在复制时指定目标路径为「目标目录+Asset名称」,无需后续重命名操作,效率更高且不影响原文件:

Get-ChildItem -Path "C:\Test Source" -Filter "Reports" -Recurse -Directory | ForEach-Object {
    # 获取当前Reports文件夹的父级Asset名称
    $assetName = $_.Parent.Name
    # 拼接目标路径:目标目录 + Asset名称
    $targetPath = Join-Path -Path "C:\Test Destination" -ChildPath $assetName
    # 复制整个Reports文件夹及内容到目标路径(自动重命名为Asset名称)
    Copy-Item -Path $_.FullName -Destination $targetPath -Recurse -Force
}

处理同名Asset的情况

如果不同Job下存在同名的Asset,直接复制会覆盖已有内容。可以添加重复判断,自动为同名文件夹添加编号:

Get-ChildItem -Path "C:\Test Source" -Filter "Reports" -Recurse -Directory | ForEach-Object {
    $assetName = $_.Parent.Name
    $targetPath = Join-Path -Path "C:\Test Destination" -ChildPath $assetName
    $counter = 1
    # 检查目标路径是否存在,存在则添加编号
    while (Test-Path -Path $targetPath) {
        $targetPath = Join-Path -Path "C:\Test Destination" -ChildPath "$assetName-$counter"
        $counter++
    }
    Copy-Item -Path $_.FullName -Destination $targetPath -Recurse -Force
}

脚本说明

  1. Get-ChildItem参数优化:用-Filter替代-Include(性能更好),加-Directory确保只遍历文件夹
  2. 直接通过$_.Parent.Name获取对应的Asset名称,无需复杂路径解析
  3. Copy-Item的-Destination直接指定最终名称,复制完成后自动完成重命名,避免后续操作错误

内容的提问来源于stack exchange,提问作者Cole Sunderman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:54:58