在Powershell中读取文本文件

时间:2016-08-25 21:38:43

标签: powershell

我有一个文本文件(在本地文件系统上),它是ID值的映射,文件名为:

1111, testfile1.xml
2222, testfile2.xml
3333, testfile3.xml

每一行都是一个映射条目,因此“1111”是testfile1.xml的相应ID值。

我正在尝试将每个测试文件发布到端点,但需要获取与该文件对应的关联ID值,因为在我们要发布到的端点的URI中需要它。

我的脚本中的代码片段,它递归包含所有testfilex.xml的目录并执行POST:

$testFiles = Get-ChildItem $testFileDir
$mapFileLocation = "C:/local/Desktop/map.txt"

foreach ($file in $testFiles) {
    $content = Get-Content $file.PSPath
    #$id = GRAB ID HERE /*TODO*/
    $URI = "http://www.myendpoint:1000/" + $id 
    $request = Invoke-WebRequest -Uri $URI -Method PUT -Body $content -ContentType "application/xml"

有什么方法可以通过PowerShell构建这样的$id?可能通过regex-ing?文本文件甚至可以这样解析吗?

1 个答案:

答案 0 :(得分:1)

将地图文件读入哈希表,您可以使用文件名作为键,ID作为值。

$map = @{}
Import-Csv $mapFileLocation | ForEach-Object { $map[$_.Filename] = $_.ID }

如果地图文件没有标题,您可以通过参数-Header为列定义标题名称:

Import-Csv $mapFileLocation -Header ID,Filename

如果文件包含如示例中所示的空格,您可能还需要Trim()值。

创建哈希表后,您可以像这样使用它:

foreach ($file in $testFiles) {
    $content = Get-Content $file.FullName
    $URI = 'http://www.myendpoint:1000/' + $map[$file.Name]
    ...
}
相关问题