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

使用PowerShell实现指定配置目录的文件复制与重命名需求

问题解决:PowerShell 精准复制指定目录并重命名文件

原脚本的核心问题是递归复制了整个目录结构,且未针对性过滤目标文件夹、处理文件重命名,导致生成多余目录。以下是符合需求的正确实现:

正确脚本实现

# 定义源目录(对应原始结构中Repo/TARGET FOLDER/DATA的实际路径)
$sourceRoot = "C:\Users\hhh\appdev\hhh\data\environments"
# 定义目标根目录(对应Export Folder的实际路径)
$targetRoot = "C:\Users\hhh\appdev\targetfolder"

# 指定需要处理的目标文件夹列表
$targetFolders = @("FOLDER1", "FOLDER2", "FOLDER3")

foreach ($folder in $targetFolders) {
    # 定位到当前文件夹下的CONFIGFOLDER源路径
    $sourceConfigPath = Join-Path -Path $sourceRoot -ChildPath "$folder\CONFIGFOLDER"
    
    # 跳过不存在的源路径
    if (-not (Test-Path -Path $sourceConfigPath)) {
        Write-Warning "源路径 $sourceConfigPath 不存在,跳过"
        continue
    }

    # 构建目标路径:Export Folder/TARGET FOLDER/[FOLDERx]/CONFIGFOLDER
    $targetConfigPath = Join-Path -Path $targetRoot -ChildPath "TARGET FOLDER\$folder\CONFIGFOLDER"
    
    # 创建目标目录(不存在则自动生成)
    if (-not (Test-Path -Path $targetConfigPath)) {
        New-Item -Path $targetConfigPath -ItemType Directory -Force | Out-Null
    }

    # 遍历CONFIGFOLDER中的所有文件,复制并重命名
    Get-ChildItem -Path $sourceConfigPath -File | ForEach-Object {
        # 生成新文件名:父文件夹名_原文件名.yaml
        $newFileName = "$($folder)_$($_.BaseName).yaml"
        $targetFilePath = Join-Path -Path $targetConfigPath -ChildPath $newFileName
        Copy-Item -Path $_.FullName -Destination $targetFilePath -Force
    }
}

关键说明

  1. 精准路径定位:直接指定目标文件夹列表,仅处理FOLDER1/2/3下的CONFIGFOLDER,避免递归遍历整个目录产生多余结构。
  2. 结构保留:仅创建需求中的TARGET FOLDER/[FOLDERx]/CONFIGFOLDER目录层级,无额外冗余目录。
  3. 文件名规范:严格按照父文件夹名_原文件名.yaml格式重命名,自动替换原文件后缀为.yaml。
  4. 容错处理:检查源路径是否存在,避免因路径缺失导致的执行错误。

内容的提问来源于stack exchange,提问作者Ben S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:01:38