我需要的只是一个Excel文件path列表,并使用Powershell将相同的扩展名添加到每个文件中(而不是replace)。
应该很简单吧? 我看到的问题是,如果我去import-csv -path myfile.csv | write-host 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}”,并重命名将无法正常工作,所以我不知道如何最好地从导入-csv命令,还是将它存储在一个对象中,或者是什么。
谢谢!!
尝试这个
$list=import-csv("myfile.csv") foreach ($entry in $list) { $withExt=$entry.FullName+".txt" write-host $withExt }
棘手的部分是,import-csv本质上返回一个数组数组。 这就是为什么我们的第一个版本是格式化的,因为写入主机正在获取的是列表的列表。 你必须遍历每一行,并单独处理每一行。 或者至less这是做到这一点的一种方法。
马西莫在这一个单线上。
尝试这个:
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创build的实际对象。
2)使用$_.FieldName引用每个对象中给定字段的值(对应于导入的CSV文件中具有相同名称的字段的值)。