Powershell相当于简单的DOS命令行:“copy * .ps1 * .ps1.bak / y”

时间:2013-10-23 01:38:42

标签: powershell batch-file

我还在学习Powershell;而且,意识到它的设计非常简单。但是,我很尴尬地说我无法找到一个简单的方法来使用PowerShell cmdlet执行下面的dos复制命令(最简单的方法)。似乎副本项目不太喜欢通配符。我试过的东西最终变得过于复杂;而且,仍然没有做我真正想做的事。

复制* .ps1 * .ps1.bak / y

4 个答案:

答案 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" }