PowerShell如何为数组每个元素拼接扩展名?原有写法未生效如何解决?
PowerShell文件名批量追加扩展名实现方案
错误原因
原有代码失效存在两个问题:
- 没有将待遍历的数组
$list1通过管道传给ForEach-Object(%为其别名),导致循环没有对应的迭代数据源 - 循环脚本块中调用了数组
$list1的整体Name属性,而非当前迭代的单个元素属性,ForEach-Object语法中需要使用$_指代当前迭代的单个对象
正确实现方式
以下几种写法均可实现需求:
- 写法1:管道遍历对象直接拼接
$list2 = $list1 | ForEach-Object { $_.Name + ".txt" }
- 写法2:先提取名称属性再批量处理(成员枚举写法,语法更简洁)
$list2 = $list1.Name | ForEach-Object { $_ + ".txt" }
- 写法3:字符串格式化拼接(适合复杂文件名规则场景)
$list2 = $list1 | ForEach-Object { "{0}.txt" -f $_.Name }
执行以上任意一种写法后,$list2即为包含test1.txt、test2.txt的目标数组。
内容的提问来源于stack exchange,提问作者user310291
相关产品推荐
相关产品推荐

