拿这个.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
}
尝试PUT文件"My, file, is, here.xml"
和"My, filename.xml"
时,上述操作会中断。地图构建仅保存“我的”作为键值,因为我们以逗号分隔。
有没有办法帮助我处理这些逗号并完全正确地保存这些字段?也许用管道而不是逗号分隔我的.txt?或者有不同的替代方法吗?
答案 0 :(得分:0)
您的文件不是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() }
}