2017-05-30 72 views
1

我有此腳本副本不拿起正確的源文件夾

$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 

我得到一個錯誤,

複製:無法找到路徑'C:\ Users \ web.developer.03 \ 149604223125762',因爲它不存在。

PowerShell的正在運行的文件夾(提示符爲):

 
C:\Users\web.developer.03> 

所以,基本上它不拿起正確的來源,而是佔用了當前目錄作爲源。我在這裏做錯了什麼?

回答

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 

Copy-Item語句中使用FullName屬性:

copy $folder.FullName E:\InvoiceUploads\files\ -Recurse 
-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>] 
+1

'copy'是'拷貝Item'的別名。他的語法完全正確。問題在於PowerShell如何處理'$ folder'的值。 –

相關問題