簡體   English   中英

Powershell哈希表鍵中的逗號

[英]Commas in Powershell hash table key

取得這個.txt檔案:

11111-2222, My, file, is, here.xml
22222-1111, My, filename.xml
22222-2323, My filename 2.xml
22222-2323, Myfilename3.xml

此文本文件表示將ID與文件系統目錄中文件名鏈接的映射(每行是一個條目,用ID號后的第一個逗號分隔)。 我有一個powershell腳本,該腳本將在較高級別將此.txt文件導入為CSV,並將其放在地圖中,在該映射中,我可以將文件名與其對應的ID號進行匹配,我需要將該文件名附加到對端點的PUT請求中。

我的腳本對於.txt ...中的第3行和第4行非常有效,除了帶逗號的文件名。 由於我們用逗號定界,因此Powershell切斷了這些字段名的縮寫,從而導致錯誤的字段值。

程式碼片段:

$mapFile = "location\of\mytextfilehere.txt"
$contentObjects = "location\of\filesIwantToPost"
$map = @{}
Import-Csv $mapFile -Header ID,Filename | ForEach-Object { $map[$_.Filename] = $_.ID }

foreach ($file in $contentObjects) {
        $content = Get-Content $object.PSPath
        $putURI = "http://myendpoint:3000/" + $map[$file.Name]
            $request = Invoke-WebRequest -Uri $putURI -Method PUT -Body $content
}

嘗試"My, file, is, here.xml"文件"My, file, is, here.xml""My, filename.xml" "My, file, is, here.xml"時,以上內容中斷了。 由於我們以逗號分隔,因此地圖構建僅將“ My”作為鍵值保存。 有沒有辦法幫助我處理這些逗號並完全正確地保存這些字段? 也許通過用管道而不是逗號來分隔我的.txt? 還是有其他替代方法?

您的文件不是CSV。 將名稱括在引號中或手動解析,如下所示:

#test data
new-item sample.txt -ItemType File -Value "11111-2222, My, file, is, here.xml
22222-1111, My, filename.xml
22222-2323, My filename 2.xml
22222-2323, Myfilename3.xml"

#parse
cat sample.txt | %{
    $ID, $File = $_ -split ',',2;
    [PSCustomObject]@{ ID=$ID; File=$File.Trim() }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM