Powershell 脚本将扩展名附加到文件,从 CSV 输入

Powershell 脚本将扩展名附加到文件,从 CSV 输入

我所需要的只是有一个 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 文件中同名字段的值)。

相关内容