我还在学习Powershell;而且,意识到它的设计非常简单。但是,我很尴尬地说我无法找到一个简单的方法来使用PowerShell cmdlet执行下面的dos复制命令(最简单的方法)。似乎副本项目不太喜欢通配符。我试过的东西最终变得过于复杂;而且,仍然没有做我真正想做的事。
复制* .ps1 * .ps1.bak / y
答案 0 :(得分:5)
内置的Copy-Item命令不会这样做但是用一个小脚本获得所需的功能并不困难:
Get-ChildItem *.ps1 | Copy-Item -Dest {"${_}.bak"}
在这种情况下不需要使用Foreach-Object
,因为Destination
参数也接受管道输入。对于接受管道输入的参数,我们可以使用scriptblock来计算参数的值。 PowerShell将$_
映射到管道对象,以便在scriptblock中使用,就像我们在Foreach-Object
脚本块中执行此操作一样。
答案 1 :(得分:1)
嗯。我没有方便的Windows机器,但你尝试过类似的东西:
Get-ChildItem *.ps1 | ForEach-Object {
Copy-Item $_ "$_.bak"
}
答案 2 :(得分:0)
试试这个:
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");
}
答案 3 :(得分:0)
基思的解决方案是我的最爱,但这就是我的建议:
foreach ($i in Get-ChildItem *.ps1) { copy $i "$i.bak" }