
我所需要的只是擁有一個文件路徑的 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}”的文件,並且對其進行重命名將不起作用,因此我不確定如何最好地從導入中獲取此資料-csv命令,或是否將其儲存在物件中,或什麼。
謝謝!
答案1
嘗試這個
$list=import-csv("myfile.csv")
foreach ($entry in $list) {
$withExt=$entry.FullName+".txt"
write-host $withExt
}
棘手的部分是 import-csv 本質上傳回一個陣列的陣列。這就是為什麼我們的第一個版本採用這樣的格式,因為 write-host 取得的是清單的清單。您必須迭代每一行並單獨處理每一行。或者至少這是一種方法。
馬西莫對此有一句俏皮話。
答案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檔案中同名欄位的值)。