[英]PowerShell script that accepts pipeline input?
需要一些幫助來調整這個將最新文件復制到另一個文件夾的腳本:
$FilePath = "C:\Downloads\Sales 202112*.xlsx"
$DestinationPath = "C:\myFiles\"
gci -Path $FilePath -File |
Sort-Object -Property LastWriteTime -Descending |
Select FullName -First 1 |
Copy-Item $_ -Destination $DestinationPath
不確定如何為 Copy-Item 命令引用管道輸入。
謝謝。
tl;博士
Get-ChildItem -Path $FilePath -File |
Sort-Object -Property LastWriteTime -Descending |
Select-Object -First 1 | # Note: No 'FullName'
Copy-Item -Destination $DestinationPath # Note: No '$_'
最簡單和最可靠的方法是pipe Get-ChildItem
/ Get-Item
output按原樣綁定到其他文件處理 cmdlet ,它綁定到后者的-LiteralPath
參數,即輸入文件路徑。
至於你嘗試了什么:
自動$_
變量,它明確地引用了手頭的管道輸入 object,僅在傳遞給 cmdlet 的腳本塊( {... }
) 內需要(並且受支持)。
通過合適的管道輸入,PowerShell 將其隱式綁定到目標 cmdlet 的管道綁定參數,在上述Copy-Item
調用的情況下,該參數為-LiteralPath
。 換句話說:沒有必要將目標參數的值指定為參數。
此答案解釋了將Get-ChildItem
輸出的System.IO.FileInfo
和System.IO.DirectoryInfo
實例綁定到文件處理 cmdlet(例如Copy-Item
)的-LiteralPath
參數的機制。
請注意,如果FullName
不在圖片中(見下文),它確實是Copy-Item
作為管道輸入接收的System.IO.FileInfo
實例,因為上面的Sort-Object...
和Select-Object -First 1
調用在不改變其類型的情況下通過它們。
選擇FullName
屬性以嘗試僅通過管道傳遞文件的完整路徑(作為字符串)是不必要的,更重要的是:
-ExpandProperty FullName
來確保只有屬性值是 output; 沒有它,您將獲得一個具有.FullName屬性的.FullName
- 請參閱此答案以獲取更多信息。System.IO.FileInfo
實例作為一個整體傳遞:僅僅字符串輸入綁定到-Path
而不是-LiteralPath
參數,這意味着什么是定義文字路徑被解釋為通配符表達式,這尤其會導致包含[
字符的文字路徑的錯誤處理(例如c:\foo\file[1].txt
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.