使用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 } }
关键说明
- 精准路径定位:直接指定目标文件夹列表,仅处理FOLDER1/2/3下的CONFIGFOLDER,避免递归遍历整个目录产生多余结构。
- 结构保留:仅创建需求中的
TARGET FOLDER/[FOLDERx]/CONFIGFOLDER目录层级,无额外冗余目录。 - 文件名规范:严格按照
父文件夹名_原文件名.yaml格式重命名,自动替换原文件后缀为.yaml。 - 容错处理:检查源路径是否存在,避免因路径缺失导致的执行错误。
内容的提问来源于stack exchange,提问作者Ben S
相关产品推荐
相关产品推荐

