选择/映射 Powershell 数组的每个项目到新数组
我在 Powershell 中有一个文件名数组,我想为每个文件名添加一个路径并在新数组中获取结果。
在 C# 中,我可以使用 Linq 来完成此操作...
var files = new string[] { "file1.txt", "file2.txt" };
var path = @"c:\temp\";
var filesWithPath = files.Select(f => path + f).ToArray();
但是在 Powershell 中执行此操作的惯用方法是什么?看起来我可以使用 foreach 语法,但我认为必须有一种更简洁、更实用的方法来实现它。
I have an array of file names in Powershell, and I would like to prepend a path to each of them and get the result in a new array.
In C# I could do this using Linq...
var files = new string[] { "file1.txt", "file2.txt" };
var path = @"c:\temp\";
var filesWithPath = files.Select(f => path + f).ToArray();
But what is the idiomatic way to do this in Powershell? It looks like there is a foreach syntax I could use, but I figure there must be a more concise, functional way to do it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Powershell 中的数组是使用
@()
语法声明的。%
是foreach-object
的简写。让我们声明一个包含所有文件名的数组,并使用 foreach 循环遍历它。join-path
将路径和子路径组合成单个路径。输出:
注意:如果输入由单个元素组成,foreach 将不会返回集合。如果需要数组,请使用显式类型或包装结果。就像这样,
An array in Powershell is declared with
@()
syntax.%
is shorthand forforeach-object
. Let's declare an array with all the file names and loop through it with foreach.join-path
combines a path and a child path into a single path.Output:
NB: if the input consists of single an element, foreach will not return a collection. If an array is desired, either use explicit type or wrap the results. Like so,
像这样:
我无法理解这个w/oa foreach。抱歉,
使用 Josh Einstein LINQ for Powershell 的出色工作
您可以这样写:
以 LINQ 方式获得相同的结果,但不使用 foreach (
%
)。Like this:
I can't figure this w/o a foreach. Sorry
Using the great job from Josh Einstein LINQ for Powershell
you can write this:
having same results in a LINQ manner but not using a foreach (
%
).您还可以使用替换运算符:
You could also use the replace operator: