【发布时间】:2021-07-28 22:51:41
【问题描述】:
我正在尝试缩短我的脚本并减少我使用的foreach 的数量。我有一个使用 Get-ChildItem 的项目列表,我想拆分每个文件名并从总列表中创建一个数组。
示例目录:
\\path\file1.name1.example1.jpg
\\path\file2.name2.example2.jpg
\\path\file3.name3.example3.jpg
期望的结果:
file1
file2
file3
当前脚本:
#get-child item of all files in hte path
$files = get-childitem "\\Path\" -Recurse
$filenames = $files.Name.Split(".")[0]
也试过了:
#get-child item of all files in hte path
$files = get-childitem "\\Path\" -Recurse
$filenames = @($files.Name).Split(".")[0]
当然,上面只为 $files 中的每个项目生成 file1 而不是 split 的第 0 部分。有没有一种方法可以一次性获得所需的结果,而无需向split 每次一个文件添加额外的foreach 操作?
【问题讨论】:
-
"[...] 并减少我使用的
foreach的数量" - 为什么? -
主要是为了学习新的命令和功能。我还发现,在没有大量嵌套的情况下,我更容易将脚本交给我的同事根据他们自己的需要进行修改。您在下面的回答很有意义,我认为集成 foreach-object 是可行的方法,而不是依赖于 foreach 循环。非常感谢,一如既往地很有帮助。
-
作为强迫自己更好地利用管道语义(和“尝试新事物”)的练习,它非常有意义 -
foreach(...){}非常适合已经物化的集合,但管道为王当涉及到“流式传输”数据时:-)
标签: arrays powershell split