用於將副檔名附加到檔案(從 CSV 輸入)的 Powershell 腳本

用於將副檔名附加到檔案(從 CSV 輸入)的 Powershell 腳本

我所需要的只是擁有一個文件路徑的 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檔案中同名欄位的值)。

相關內容