3

我还在学习 Powershell;并且,意识到它的设计非常简单。但是,我很尴尬地说我想不出一种简单的方法来使用 powershell cmdlet 执行以下 dos copy 命令(可能是最简单的方法)。似乎该副本项不太喜欢通配符。我尝试过的事情最终变得过于复杂。而且,仍然没有做我真正想做的事情。

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

4

4 回答 4

5

内置的 Copy-Item 命令不会执行此操作,但使用一个小脚本不难获得所需的功能:

Get-ChildItem *.ps1 | Copy-Item -Dest {"${_}.bak"}

Foreach-Object在这种情况下不需要使用 ,因为Destination参数也接受管道输入。对于接受管道输入的参数,我们可以使用脚本块来计算参数的值。PowerShell 映射$_到管道对象以在脚本块内使用,就像我们在脚本块中执行此操作一样Foreach-Object

于 2013-10-23T02:12:54.737 回答
1

嗯。我手边没有 Windows 机器,但您是否尝试过类似的方法:

Get-ChildItem *.ps1 | ForEach-Object {
    Copy-Item $_ "$_.bak"
}
于 2013-10-23T01:46:13.690 回答
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");    
}
于 2013-10-23T01:51:05.110 回答
0

基思的解决方案是我最喜欢的,但这是我的建议:

foreach ($i in Get-ChildItem *.ps1) { copy $i "$i.bak" }
于 2013-10-23T08:12:24.380 回答