我在Powershell中有一个文件名数组,我想在它们前面添加一个路径并将结果放在一个新数组中.
在C#中,我可以使用Linq来做到这一点......
var files = new string[] { "file1.txt", "file2.txt" };
var path = "c:\temp\";
var filesWithPath = files.Select(f => path + f).ToArray();
Run Code Online (Sandbox Code Playgroud)
但是在Powershell中这样做的惯用方法是什么?看起来我可以使用foreach语法,但我认为必须有一个更简洁,更实用的方法来实现它.
von*_*ryz 61
Powershell中的数组使用@()语法声明.%是简写foreach-object.让我们声明一个包含所有文件名的数组,并使用foreach循环遍历它.join-path将路径和子路径组合成单个路径.
$files = @("file1.txt", "file2.txt")
$pFiles = $files | % {join-path "c:\temp" $_ }
$pFiles
Run Code Online (Sandbox Code Playgroud)
输出:
c:\temp\file1.txt
c:\temp\file2.txt
Run Code Online (Sandbox Code Playgroud)
注意:如果输入由单个元素组成,则foreach不会返回集合.如果需要数组,请使用显式类型或包装结果.像这样,
[array]$pFiles = $files | % {join-path "c:\temp" $_ }
$pFiles = @($files | % {join-path "c:\temp" $_ })
Run Code Online (Sandbox Code Playgroud)
像这样:
$a = @("file1.txt","file2.txt")
$b = "c:\temp\"
$c = $a | % { $b + $_ }
Run Code Online (Sandbox Code Playgroud)
我无法理解这个 w/oa foreach 。对不起
使用 Josh Einstein LINQ for Powershell的出色工作
你可以这样写:
$a = @("file1.txt","file2.txt")
$b = "c:\temp\"
$c = $a | Linq-Select -Selector {$b + $_ }
Run Code Online (Sandbox Code Playgroud)
以 LINQ 方式获得相同的结果,但不使用 foreach ( %)。
| 归档时间: |
|
| 查看次数: |
21350 次 |
| 最近记录: |