PowerShell将文件夹从备份文件夹复制到目标文件夹

时间:2013-11-26 20:07:48

标签: powershell

我在网络共享上有一个文件夹 - 称之为\ Server \ Backup \ November.25.2013.backup。 此文件夹包含子文件夹\ test1,\ test2,\ test3。

示例:

\\Server\Backup\November.25.2013.backup\
                                       .\Test1
                                       .\Test2
                                       .\Test3

我需要将November.25.2013.backup的子文件夹复制到c:\ Test。 此功能仅用于复制指定日期的备份文件夹内容(在本例中为昨天的备份)。我正在使用此脚本来恢复最后一天的备份减去名称(November.25.2013.backup)。以下是我一直在尝试使用的内容:

Get-ChildItem -Path \\Server\Backup -r | Where-Object {$_.LastWriteTime -gt (Get-Date).Date}
% { Copy-Item -Path $_.FullName -Destination C:\Test -WhatIf }

但是我收到了错误

    Copy-Item : Cannot bind argument to parameter 'Path' because it is null.
At line:3 char:20
+ % { Copy-Item -Path <<<<  $_.fullname -destination C:\Test -whatif }
    + CategoryInfo          : InvalidData: (:) [Copy-Item], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.CopyItemCommand

请理解我仍然是使用Powershell脚本编写的新手,我不知道如何解决这个问题。我很感激任何建议。

我的目标是从备份文件夹中恢复文件夹。谢谢。

2 个答案:

答案 0 :(得分:3)

您在第一行末尾缺少一个管道。

此外,如果您尝试获取上次写入时间为昨天的文件夹,则该文件夹将小于当前日期的-lt

Get-ChildItem -Path \\Server\Backup -r | Where-object {$_.lastwritetime -lt (get-date).date} |
% { Copy-Item -Path $_.fullname -destination C:\Test -whatif }

但如果每天都有一个文件夹,那么这可能会比你想要的更多。如果你只想要昨天写的东西,请使用:

Get-ChildItem -Path \\Server\Backup -r | Where-object {($_.lastwritetime.date -eq ((get-date).adddays(-1)).date)} |
% { Copy-Item -Path $_.fullname -destination C:\Test -whatif }

评论示例:

Get-ChildItem -Path c:\test -r | Where-object {$_.PSIscontainer -and (($_.lastwritetime.date -eq ((get-date).adddays(-1)).date))}  |
% { Copy-Item $_.fullName -destination C:\Testoutput\ -recurse}

答案 1 :(得分:2)

(也作为答案添加。)

在粘贴的代码中,Where-Object和%之间没有管道。

简单解决方案:在第一行的末尾添加|

Get-ChildItem -Path \\Server\Backup -r | ? {$_.lastwritetime -gt (get-date).date} |
% { Copy-Item -Path $_.fullname -destination C:\Test -whatif }