Powershell:将配置文件从一个位置复制到另一个位置

时间:2015-01-15 19:24:07

标签: powershell

尝试迭代配置文件文件夹以将其桌面复制到新位置,但无法正确拼凑迭代。

get-childitem -path c:\users\*\desktop\ `
| ForEach-Object { Copy-Item $_ -Force -Destination D:\Users\*\ }

1 个答案:

答案 0 :(得分:2)

那么这样呢?

Get-ChildItem -Path c:\users | ForEach-Object{
    Copy-Item "$($_.FullName)\Desktop" -Force -Destination "D:\Users\$($_.Name)\Desktop"
}

让它弄清楚文件夹中的用户名是什么(可能必须省略管理员等一些用户)。然后使用收集的文件夹名称(在循环内由$_.Name表示),我们可以使用它来寻址源桌面和目标桌面。警告这不会对路径验证进行任何错误检查。这样的东西很容易出错,因为你不能保证目标中存在一个文件夹。

可以通过以下方式解决这个问题:

Get-ChildItem -Path c:\users -Exclude "public","administrator" | ForEach-Object{
    $sourceDesktop = "$($_.FullName)\Desktop"
    $targetDesktop = "D:\Users\$($_.Name)\Desktop"


    If(((Test-Path $sourceDesktop,$targetDesktop) -eq $false).Count -gt 0){
        Copy-Item $sourceDesktop -Destination $targetDesktop -Force
    }
}

(((Test-Path $sourceDesktop,$targetDesktop) -eq $false).Count -gt 0)像这样分解

  1. Test-Path将为所有提供的文件夹返回True`False`数组。
  2. 如果任何测试返回false,则至少有一个文件夹不存在,因此我们不应尝试传输。
  3. 如果您选择,也可以删除一个排除部分。