选择/映射 Powershell 数组的每个项目到新数组

发布于 2024-12-27 12:45:56 字数 380 浏览 4 评论 0原文

我在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

今天小雨转甜 2025-01-03 12:45:56

Powershell 中的数组是使用 @() 语法声明的。 %foreach-object 的简写。让我们声明一个包含所有文件名的数组,并使用 foreach 循环遍历它。 join-path 将路径和子路径组合成单个路径。

$files = @("file1.txt", "file2.txt")
$pFiles = $files | % {join-path "c:\temp" $_ }
$pFiles

输出:

c:\temp\file1.txt
c:\temp\file2.txt

注意:如果输入由单个元素组成,foreach 将不会返回集合。如果需要数组,请使用显式类型或包装结果。就像这样,

[array]$pFiles = $files | % {join-path "c:\temp" $_ }
$pFiles = @($files | % {join-path "c:\temp" $_ })

An array in Powershell is declared with @() syntax. % is shorthand for foreach-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.

$files = @("file1.txt", "file2.txt")
$pFiles = $files | % {join-path "c:\temp" $_ }
$pFiles

Output:

c:\temp\file1.txt
c:\temp\file2.txt

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,

[array]$pFiles = $files | % {join-path "c:\temp" $_ }
$pFiles = @($files | % {join-path "c:\temp" $_ })
呆° 2025-01-03 12:45:56

像这样:

$a = @("file1.txt","file2.txt")
$b = "c:\temp\"
$c = $a | % { $b + $_ }

我无法理解这个w/oa foreach。抱歉,

使用 Josh Einstein LINQ for Powershell 的出色工作

您可以这样写:

$a = @("file1.txt","file2.txt")
$b = "c:\temp\"
$c = $a | Linq-Select -Selector {$b + $_ }

以 LINQ 方式获得相同的结果,但不使用 foreach (%)。

Like this:

$a = @("file1.txt","file2.txt")
$b = "c:\temp\"
$c = $a | % { $b + $_ }

I can't figure this w/o a foreach. Sorry

Using the great job from Josh Einstein LINQ for Powershell

you can write this:

$a = @("file1.txt","file2.txt")
$b = "c:\temp\"
$c = $a | Linq-Select -Selector {$b + $_ }

having same results in a LINQ manner but not using a foreach (%).

盗梦空间 2025-01-03 12:45:56

您还可以使用替换运算符:

PS> 'file1.txt','file2.txt','file3.txt' -replace '(^.+$)','C:\temp\$1'

C:\temp\file1.txt
C:\temp\file2.txt
C:\temp\file3.txt

You could also use the replace operator:

PS> 'file1.txt','file2.txt','file3.txt' -replace '(^.+$)','C:\temp\$1'

C:\temp\file1.txt
C:\temp\file2.txt
C:\temp\file3.txt
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文