我所需要的只是有一个 Excel 文件路径列表,然后使用 Powershell 将相同的扩展名附加(而不是替换)到每个文件上。
这应该很简单,对吧?我看到的问题是,如果我去,import-csv -path myfile.csv | write-host
我会得到以下输出:
@{FullName=C:\Users\jpalumbo\test\appendto.me}
@{FullName=C:\Users\jpalumbo\test\append_list.csv}
@{FullName=C:\Users\jpalumbo\test\leavemealone.txt}
换句话说,它看起来也像输出 CSV“格式”。
但是,如果我只是发出import-csv -path myfile.csv
,则输出就是我期望的:
FullName
--------
C:\Users\jpalumbo\test\appendto.me
C:\Users\jpalumbo\test\append_list.csv
C:\Users\jpalumbo\test\leavemealone.txt
显然没有名为“@{FullName=C:\Users\jpalumbo\test\leavemealone.txt}”的文件,并且重命名该文件不起作用,所以我不确定如何最好地从 import-csv 命令中获取这些数据,或者是否将其存储在对象中,或者其他什么。
谢谢!!
答案1
尝试这个
$list=import-csv("myfile.csv")
foreach ($entry in $list) {
$withExt=$entry.FullName+".txt"
write-host $withExt
}
棘手的部分是 import-csv 本质上返回的是数组数组。这就是为什么我们的第一个版本是按照这种方式格式化的,因为 write-host 获取的是列表列表。您必须遍历每一行并单独处理每一行。或者至少这是这样做的一种方法。
马西莫 (Massimo) 对此有一句话。
答案2
尝试这个:
Import-Csv -path myfile.csv | ForEach-Object { Write-Host $_.FullName }
当然,您可以在 ForEach-Object 的脚本块中执行任何您想做的事情,而不仅仅是写出“FullName”字段的值。
这会将“.ext”扩展名附加到所有文件名:
Import-Csv -path myfile.csv | ForEach-Object { Write-Host $_.FullName + ".ext" }
这里的技巧是:
1) 使用ForEach-Object
来作用于 创建的实际对象Import-Csv
。
2) 使用$_.FieldName
来引用每个对象中给定字段的值(对应于导入的 CSV 文件中同名字段的值)。