使用PowerShell在源服务器的同一目录结构中的文件夹和子文件夹中复制项目文件

use*_*332 28 powershell powershell-2.0 powershell-3.0

我很难在下面的脚本中努力将文件复制到文件夹和子文件夹中的正确结构(作为源服务器).

可以说,有下面提到的文件夹:

主文件夹:文件aaa,文件bbb

子文件夹a:文件1,文件2,文件3

子文件夹b:文件4,文件5,文件6

使用的脚本:

Get-ChildItem -Path \\Server1\Test -recurse | ForEach-Object {
Copy-Item -LiteralPath $_.FullName -Destination \\server2\test |
Get-Acl -Path $_.FullName | Set-Acl -Path "\\server2\test\$(Split-Path -Path $_.FullName -Leaf)"

}
Run Code Online (Sandbox Code Playgroud)

输出:文件aaa,文件bbb

子文件夹a(空文件夹)

子文件夹b(空文件夹)

文件1,文件2,文件3,文件4,文件5,文件6.

我希望将文件复制到各自的文件夹(如源文件夹).任何进一步的帮助都非常感谢.

Kev*_*in_ 64

这可以使用Copy-Item完成.无需使用Get-Childitem.我想你只是在思考它.

Copy-Item -Path C:\MyFolder -Destination \\Server\MyFolder -recurse -Force
Run Code Online (Sandbox Code Playgroud)

我刚试过它,它对我有用.

  • 我发现如果你多次运行它,这个命令的行为会改变.第一次,它会将所有内容复制到\\ Server\MyFolder.第二次及以后,它会将所有内容复制到\\ Server\MyFolder\MyFolder (25认同)
  • @thecodefish老帖子,但这个问题仍然相关.如果将一个通配符添加到`-Path`中,它将最终出现在`-Destination`(而不是\\ Server\MyFolder\MyFolder)中.我最终得到了'Copy-Item'$ PathToCopy\*"-Destination"$ Destination"-Recurse" (6认同)
  • 我的目录结构如下所示: ./web.config、./bin/*、./dll/* ...我在 `Copy-Item -Path "$sourceFolder\*" -Destination $ 中看到的问题targetFolder -Recurse` 的优点是它似乎获取了 $sourceFolder 子目录下的所有内容(在我的例子中是 dll 和 bin),并将其与从 sourceFolder 根目录复制的所有其他文件一起放在 $targetFolder 的根目录下。通过在执行递归复制之前创建 $targetFolder 也可以修复此行为。微软:这不是明智或理智的行为。 (4认同)
  • @thecodefish 我也注意到了这一点,但只有在目标目录不存在时才会发生。使用 New-Item -ItemType Directory -Path $target -Force | Out-Null 将解决这个问题。-Force 开关只会在目录不存在时创建目录,并且 Out-Null 不会污染您的输出。 (2认同)