我还在学习 Powershell;并且,意识到它的设计非常简单。但是,我很尴尬地说我想不出一种简单的方法来使用 powershell cmdlet 执行以下 dos copy 命令(可能是最简单的方法)。似乎该副本项不太喜欢通配符。我尝试过的事情最终变得过于复杂。而且,仍然没有做我真正想做的事情。
复制 *.ps1 *.ps1.bak /y
我还在学习 Powershell;并且,意识到它的设计非常简单。但是,我很尴尬地说我想不出一种简单的方法来使用 powershell cmdlet 执行以下 dos copy 命令(可能是最简单的方法)。似乎该副本项不太喜欢通配符。我尝试过的事情最终变得过于复杂。而且,仍然没有做我真正想做的事情。
复制 *.ps1 *.ps1.bak /y
内置的 Copy-Item 命令不会执行此操作,但使用一个小脚本不难获得所需的功能:
Get-ChildItem *.ps1 | Copy-Item -Dest {"${_}.bak"}
Foreach-Object
在这种情况下不需要使用 ,因为Destination
参数也接受管道输入。对于接受管道输入的参数,我们可以使用脚本块来计算参数的值。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" }