我使用下面的ps命令批量讀取檔案夾中每個txt檔案的內容,然后匯出為csv。正常讀取,但是檔案內容變成了一行,換行符全部丟失
ls |Select-Object -Property {Get-Content $_.FullName -Encoding utf8} | Export-Csv "a.csv" -Encoding UTF8
我希望它在匯出時保持格式(主要是空格和換行符)
輸入和輸出:在此處輸入影像描述
uj5u.com熱心網友回復:
兩者之一:使用
-RawwithGet-Content確保每個檔案都被讀取為單個多行字串。# Note the use of -Raw Get-ChildItem | Select-Object -Property { Get-Content -Raw $_.FullName -Encoding utf8 } | Export-Csv "a.csv" -Encoding UTF8或者,如果您想控制換行符格式以及每個檔案的行是否應該有一個尾隨換行符,請使用
Get-Contentwithout 并使用選擇的換行符/序列-Raw加入結果行陣列-join:# Note the -join "`n" (joining the lines with Unix-format LF-only newlines). # Each resulting string will have *no* trailing newline, but you # you can add it with ((Get-Content ...) -join "`n") "`n" # Use "`r`n" for Windows-format CRLF newlines. Get-ChildItem | Select-Object -Property { (Get-Content $_.FullName -Encoding utf8) -join "`n" } | Export-Csv "a.csv" -Encoding UTF8
請注意,您的 CSV 檔案:
將有一列,其欄位是
"..."- 封閉的多行字串。- 使用類似的東西
Select-Object Name, { ... }來包含每個檔案的名稱。
- 使用類似的東西
該列的名稱將是腳本塊的逐字內容(您將傳遞給's引數。
{ ... }Select-Object-Property為了給列一個更好的名字,使用一個哈希表作為計算屬性,它的
Name條目允許你指定名稱,并且它的Expression條目必須是你的腳本塊;例如:... | Select-Object @{ Name='FileContents'; Expression={ Get-Content -Raw $_.FullName -Encoding utf8 } } | ...
至于你嘗試了什么:
不使用時
-Raw,逐行Get-Content流式傳輸檔案的內容,當捕獲該輸出時,它變成一個陣列。計算屬性的腳本塊的計算結果作為一個整體用于確定該屬性的值,因此結果確實是行陣列。
當
Export-Csv(或ConvertTo-Csv)遇到一個屬性值是一個陣列(或類似型別的集合)時,它會將其字串化,即它必須將集合的表示創建為單個字串:通常,這只會通過集合的型別名稱導致無用的字串化,例如,在陣列的情況下,逐字逐句
System.Object[]但是,如果 - 就像你的情況一樣 - 集合恰好被包裝在一個通常不可見
[psobject]的實體中,則會發生更有用的單行字串化:(字串化的)集合元素實際上與空格相連,檔案中的換行符因此被替換為空格。在您的情況下存在包裝器的原因
[psobject]是 PowerShell 以這種方式包裝來自管道的輸出物件- 其中包括來自腳本塊 ({ ... }) 的輸出。
為了說明上述情況:
# NO [psobject] wrapper -> CSV serialization by *type name*:
PS> [pscustomobject] @{ ArrayProp = 'one', 'two' } | ConvertTo-Csv
"ArrayProp"
"System.Object[]" # !!
# WITH [psobject] wrapper -> CSV serialization by
# *space-concatenated elements*:
PS> [pscustomobject] @{ ArrayProp = [psobject] ('one', 'two') } | ConvertTo-Csv
"ArrayProp"
"one two" # !!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/523409.html
標籤:电源外壳
上一篇:Gradle任務將依賴的jar與組名一起復制到檔案夾中
下一篇:如何連接字串
