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

使用PowerShell+Robocopy复制SystemData下XML文件并保留目录结构

解决嵌套SystemData文件夹中XML文件的复制问题(保留目录结构)

原脚本问题分析

你尝试的代码存在几个关键问题:

  • robocopy语法错误:robocopy的标准用法是robocopy <源目录> <目标目录> <文件>,不能直接将单个文件路径作为源和目标参数
  • 冗余的文件创建操作:New-Item创建目标文件完全没必要,复制操作会自动生成文件,重点应确保目标目录存在
  • 路径拼接风险:用字符串拼接生成目标路径容易出现路径分隔符缺失或重复的问题

修正后的PowerShell脚本(推荐方案)

这个方案用原生PowerShell命令实现,更简洁且易维护:

$sourceDir = 'C:\Users\peter.franca\Desktop\ProcessedProducts'
$targetDir = 'C:\Users\peter.franca\Desktop\CopiedFiles\ProcessedProducts'

# 初始化日志文件
"Backup Started at $(Get-Date)" | Out-File -FilePath 'C:\SystemDataBackup.Log' -Encoding utf8

# 筛选所有SystemData目录下的XML文件并复制
Get-ChildItem -Path $sourceDir -Filter '*.xml' -Recurse | 
    Where-Object { $_.Directory.Name -eq 'SystemData' } |  # 精准匹配父目录为SystemData的文件
    ForEach-Object {
        # 替换源路径前缀生成目标路径
        $targetFilePath = $_.FullName.Replace($sourceDir, $targetDir)
        # 确保目标目录存在
        $targetFileDir = Split-Path -Path $targetFilePath -Parent
        if (-not (Test-Path -Path $targetFileDir)) {
            New-Item -ItemType Directory -Path $targetFileDir -Force | Out-Null
        }
        # 复制文件并保留原属性(创建/修改时间等)
        Copy-Item -Path $_.FullName -Destination $targetFilePath -Force -CopyMode Preserve
    }

# 追加结束日志
"Backup Finished at $(Get-Date)" | Out-File -FilePath 'C:\SystemDataBackup.Log' -Encoding utf8 -Append

基于robocopy的替代方案

如果你坚持使用robocopy,可以直接定位到每个SystemData目录进行批量复制:

$sourceDir = 'C:\Users\peter.franca\Desktop\ProcessedProducts'
$targetDir = 'C:\Users\peter.franca\Desktop\CopiedFiles\ProcessedProducts'

"Backup Started at $(Get-Date)" | Out-File -FilePath 'C:\SystemDataBackup.Log' -Encoding utf8

# 遍历所有SystemData目录,用robocopy复制XML文件
Get-ChildItem -Path $sourceDir -Directory -Recurse | 
    Where-Object { $_.Name -eq 'SystemData' } |
    ForEach-Object {
        $targetSystemDir = $_.FullName.Replace($sourceDir, $targetDir)
        # robocopy参数说明:/COPY:DT保留日期时间属性,/E复制子目录,/R:3重试3次,/W:5等待5秒
        robocopy $_.FullName $targetSystemDir *.xml /COPY:DT /E /R:3 /W:5
        # 记录复制动作到日志
        "Copied XML files from $($_.FullName) to $targetSystemDir" | Out-File -FilePath 'C:\SystemDataBackup.Log' -Encoding utf8 -Append
    }

"Backup Finished at $(Get-Date)" | Out-File -FilePath 'C:\SystemDataBackup.Log' -Encoding utf8 -Append

内容的提问来源于stack exchange,提问作者Peter Franca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:06:22