Powershell Copy-Item不保留文件夹结构

时间:2017-10-31 13:16:20

标签: powershell

我有以下脚本将数据从本地文件夹复制到使用当前日期创建的远程文件夹。但是文件正在复制,但文件夹结构不是。

$Date = (Get-Date).ToString("MMddyyyy"),$_.Extension
$Source = "E:\Folder1\\*"
$Dest   = "\\Server\Share\Folder2"
$Username = "Username"
$Password = ConvertTo-SecureString "Password" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential($Username, $Password)
Remove-PSDrive -Name T
Start-Sleep -s 1
New-PSDrive -Name T -PSProvider FileSystem -Root $Dest -Credential $mycreds -Persist
if (!(Test-Path "T:\$Date"))
{
    md -Path "T:\$Date"
}
Get-ChildItem -Path $Source -Recurse | % { Copy-Item -Path $_ -Destination "T:\$Date" -Container -Force -Verbose }

有人可以告诉我这里哪里出错吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

好的剧本,我想我们可以立刻对其进行排序!

为什么会这样?

这是失败的原因就在这一步:

  Get-ChildItem -Path $Source -Recurse  

-Recurse开关让你感到痛苦。为了说明原因,我创建了一个简单的文件夹结构。

enter image description here

单独运行Get-ChildItem -Path $Source -Recurse时,您将获得$Source路径中所有文件的递归列表,如下所示:

PS C:\temp\stack> Get-ChildItem -Recurse

Directory: C:\temp\stack

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----         8/4/2017  10:50 AM                Source


Directory: C:\temp\stack\Source    

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----         8/4/2017  10:57 AM                1
d-----         8/4/2017  10:57 AM                2
d-----         8/4/2017  10:57 AM                3
d-----         8/4/2017  10:57 AM                4


Directory: C:\temp\stack\Source\1    

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----         8/4/2017  10:57 AM             20 Archive.rar
-a----         8/4/2017  10:56 AM              0 File01.bmp

好吧,在脚本的下一步中,您将每个文件的输出传输到Copy-Item

你基本上明确地告诉PowerShell'把这个文件夹及其所有的子文件夹和所有东西,并将它们全部转储到这个文件夹中,忽略文件夹结构'

如何修复

您真正想做的只是将-Recurse参数移到Copy-Item,然后就完成了:)

Get-ChildItem -Path $Source |  
    Copy-Item -Destination "T:\$Date" -Container -Recurse -Force -Verbose 

希望有所帮助,祝你有愉快的一天!