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

PowerShell 2.0批量创建每日文件夹并复制指定XML文件问题

原代码问题点

  • 不兼容PowerShell 2.0:使用了-File、-Directory参数,这两个参数在PowerShell 2.0中不存在。
  • 文件夹创建位置错误:foreach循环固定在Testziel根目录创建$day文件夹,未对应到每个XML文件的层级。
  • 缺少文件复制逻辑:仅创建文件夹,未将对应XML文件复制到目标位置。
  • 存在无效冗余代码:例如$path = Get-ChildItem $latestfile -Name "FilePath"等代码无法正确获取路径,属于无效逻辑。

修正后的PowerShell 2.0兼容脚本

# 复制目录结构(/s:复制子目录,不含空目录;需包含空目录可改用/e)
robocopy "C:\Users\User\Documents\Ziel" "C:\Users\User\Documents\Testziel" /s

# 遍历Testziel下的子文件夹,获取每个文件夹内最新的XML文件(适配PowerShell 2.0)
$latestfile = Get-ChildItem -Path 'C:\Users\User\Documents\Testziel' | Where-Object { $_.PSIsContainer } | ForEach-Object {
    # 递归查找当前文件夹内的XML文件,排除子文件夹
    Get-ChildItem -Path $_.FullName -Filter '*.xml' -Recurse | Where-Object { !$_.PSIsContainer } |
        # 按最后修改时间排序,取最新的一个文件
        Sort-Object LastWriteTime |
        # 保存文件完整路径和它的直接父目录
        Select-Object FullName, @{ N = 'ParentDir'; E = { $_.Directory } } -Last 1 
}

# 获取当日日期的年月和日
$date = Get-Date
$yearMonth = $date.ToString("yyyyMM")
$day = $date.ToString("dd")

# 遍历每个最新XML文件,创建对应层级文件夹并复制文件
foreach ($file in $latestfile) {
    # 构建目标文件夹路径:XML所在父目录 + 当日日期文件夹
    # 示例:C:\Users\User\Documents\Testziel\MYBOFFID.xxx\202405\15
    $targetFolder = Join-Path -Path $file.ParentDir.FullName -ChildPath $day
    
    # 创建文件夹,-Force确保已存在时不报错
    New-Item -Path $targetFolder -ItemType Directory -Force | Out-Null
    
    # 复制XML文件到目标文件夹,-Force覆盖同名文件
    Copy-Item -Path $file.FullName -Destination $targetFolder -Force
}

关键修正说明

  • PowerShell 2.0适配:
    • 用Where-Object { $_.PSIsContainer }替代-Directory参数筛选文件夹。
    • 用Where-Object { !$_.PSIsContainer }替代-File参数筛选XML文件。
  • 文件夹路径修正:
    • 通过Join-Path拼接XML文件的直接父目录与当日日期,确保文件夹创建在MYBOFFID.xxx/YYYYMM/DD目标层级。
  • 补全核心逻辑:
    • 添加Copy-Item命令,完成XML文件到目标文件夹的复制操作。
  • 清理无效代码:移除原脚本中逻辑错误的冗余代码,简化整体逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:47:34