我有这个脚本
$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>
所以,基本上它没有找到正确的源,而是将当前目录作为源。我在这里做错了什么?
答案 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>]