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
相关产品推荐
相关产品推荐

