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

求PowerShell脚本:按指定名称筛选复制子文件夹

PowerShell脚本:批量复制指定子文件夹并保留目录结构

原代码问题分析

你当前的脚本缺少两个核心逻辑:

  1. 没有筛选出每个客户文件夹下的Proposals子文件夹,而是直接复制了整个客户目录
  2. 目标路径没有保留客户名称\Proposals的层级结构,所有内容会被直接放到目标根目录下

修正后的脚本

以下脚本会遍历指定源路径下的所有客户文件夹,仅复制其中存在的Proposals子文件夹,并在目标路径中保留原有的目录结构:

# 配置源路径和目标根路径
$sourceRoot = "C:\Clients"
$targetRoot = "C:\Test\Clients"

# 获取源路径下的所有一级客户文件夹(仅文件夹,排除文件)
$clientFolders = Get-ChildItem -Path $sourceRoot -Directory

foreach ($clientFolder in $clientFolders) {
    # 构造当前客户的Proposals文件夹完整路径
    $proposalSource = Join-Path -Path $clientFolder.FullName -ChildPath "Proposals"
    
    # 先检查Proposals文件夹是否存在,避免无效复制
    if (Test-Path -Path $proposalSource -PathType Container) {
        # 构造目标路径,保留客户名称层级:C:\Test\Clients\客户名\Proposals
        $proposalTarget = Join-Path -Path $targetRoot -ChildPath "$($clientFolder.Name)\Proposals"
        
        # 复制文件夹及所有内容,-Force可覆盖已存在的目标(按需启用)
        Copy-Item -Path $proposalSource -Destination $proposalTarget -Recurse -Force
        
        Write-Host "完成复制: $proposalSource -> $proposalTarget"
    }
    else {
        Write-Host "跳过: 未找到$($clientFolder.Name)下的Proposals文件夹"
    }
}

关键逻辑说明

  • Get-ChildItem -Directory:仅获取源路径下的一级子文件夹(即客户文件夹),不会遍历深层目录
  • Join-Path:安全拼接路径字符串,避免手动拼接时出现的路径分隔符错误
  • Test-Path:提前验证Proposals文件夹是否存在,跳过无效的复制操作
  • 目录结构保留:通过$clientFolder.Name在目标路径中重建客户名称层级,确保最终路径符合C:\Test\Clients\*Clientname\Proposals的要求

内容的提问来源于stack exchange,提问作者Eden Hamami

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:36:19