复制没有拿起正确的源文件夹

时间:2017-05-30 08:14:37

标签: windows powershell copy

我有这个脚本

$folder = Get-ChildItem -Path \\exp-01\Uploads |
          Sort-Object LastWriteTime -Descending |
          Select-Object -Last 1

文件夹变量已正确设置,当我检查它时,它出现为

    Directory: \\exp-01\Uploads


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        29/05/2017     08:17            149604223125762

但是当我这样做时

copy $folder E:\InvoiceUploads\files\ -Recurse

我收到错误,

  

copy:找不到路径'C:\ Users \ web.developer.03 \ 149604223125762',因为它不存在。

PowerShell正在运行该文件夹(提示符是):

C:\Users\web.developer.03>

所以,基本上它没有找到正确的源,而是将当前目录作为源。我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

$folder包含DirectoryInfo个对象,而不是路径。默认情况下,PowerShell会扩展这些对象的Name属性,因此Copy-Item正在当前工作目录中查找文件夹名称。

选择文件夹时展开FullName属性:

$folder = Get-ChildItem -Path \\exp-01\Uploads |
          Sort-Object LastWriteTime -Descending |
          Select-Object -Last 1 -Expand FullName

或使用FullName语句中的Copy-Item属性:

copy $folder.FullName E:\InvoiceUploads\files\ -Recurse

答案 1 :(得分:-1)

好像您正在使用MS CMD语法。 (请注意,您使用的是复制 - 而不是复制项目)

您是否尝试使用Powershells cmdlet进行复制,以及源和目标的命名参数?也许它可以帮助你。

SYNTAX
    Copy-Item [-Path] <String[]> [[-Destination] <String>] [-Container] [-Credential <PSCredential>] [-Exclude <String[
    ]>] [-Filter <String>] [-Force] [-Include <String[]>] [-PassThru] [-Recurse] [-Confirm] [-WhatIf] [-UseTransaction
    [<SwitchParameter>]] [<CommonParameters>]

    Copy-Item [[-Destination] <String>] [-Container] [-Credential <PSCredential>] [-Exclude <String[]>] [-Filter <Strin
    g>] [-Force] [-Include <String[]>] [-PassThru] [-Recurse] -LiteralPath <String[]> [-Confirm] [-WhatIf] [-UseTransac
    tion [<SwitchParameter>]] [<CommonParameters>]