我還在學習Powershell;並意識到它的設計非常簡單。但是,我很尷尬地說,我不能找出一個簡單的方法來使用powershell cmdlet執行下面的dos複製命令(最簡單的方法)。看起來這個複製品不是非常喜歡通配符。我試過的東西最終過於複雜;而且還沒有做到我真正想要的事情。Powershell相當於簡單的DOS命令行:「copy * .ps1 * .ps1.bak/y」
副本* *名爲.psl .ps1.bak/Y
我還在學習Powershell;並意識到它的設計非常簡單。但是,我很尷尬地說,我不能找出一個簡單的方法來使用powershell cmdlet執行下面的dos複製命令(最簡單的方法)。看起來這個複製品不是非常喜歡通配符。我試過的東西最終過於複雜;而且還沒有做到我真正想要的事情。Powershell相當於簡單的DOS命令行:「copy * .ps1 * .ps1.bak/y」
副本* *名爲.psl .ps1.bak/Y
內置的複製-Item命令不會執行此操作,但使用一個小腳本獲得所需功能並不困難:
Get-ChildItem *.ps1 | Copy-Item -Dest {"${_}.bak"}
在這種情況下不需要使用Foreach-Object
,因爲Destination
參數也接受管道輸入。對於接受管道輸入的參數,我們可以使用scriptblock來計算參數的值。 PowerShell將$_
映射到在腳本塊中使用的管道對象,就好像我們在Foreach-Object
腳本塊中執行此操作一樣。
嗯。我沒有Windows機器方便,但你嘗試過這樣的:
Get-ChildItem *.ps1 | ForEach-Object {
Copy-Item $_ "$_.bak"
}
試試這個:
copy-item -rec -filter *.ps1 C:\Source C:\Dest
更新:
a = Get-Item .\*.ps1
foreach($file in $a)
{
Copy-Item $file.FullName "C:\mydir\$($file.Name.replace(".ps1",".ps1.bak");
}
基思的解決方案是我最喜歡的,但這裏是我會建議:
foreach ($i in Get-ChildItem *.ps1) { copy $i "$i.bak" }
我不知道爲什麼,但是當我嘗試了不同的機器上今天這個,我得到了以下錯誤消息。我可以使它工作的唯一方法是將$ _更改爲$ _。name ** Copy-Item:參數'Destination'的腳本塊輸入失敗。方法調用失敗,因爲[System.IO.FileInfo]不包含名爲'op_Addition'的方法。 在線:1 char:39 + Get-ChildItem * .ps1 | Copy-Item -Dest {$ _ +「.bak」} ** – MKANET
是的,它可能是最好的評估字符串中的$ _(見我更新的答案)。 –