Windows命令行根据键值对附加到xml文件

时间:2012-06-21 14:40:10

标签: xml windows command-line key-value

我在一堆单独的目录中有一堆名为content_ [0-9](内容下划线后跟一位数字)的xml文件。这些文件都有一个airport_code元素,如下所示:

<airport_code>JFK</airport_code>

然后我有一个像这样的键值映射:

JFK=US/Eastern
LHR=Europe/London
etc

我想遍历所有这些xml文件,并将正确的timezone元素附加到每个xml文件,以便JFK文件读取:

<airport_code>JFK</airport_code> 
<timezone>US/Eastern</timezone>

我试图在Windows批处理脚本(安装了unix utils)中执行此操作。这是我到目前为止所做的:

@echo off 
for /d %%x in (C:\directory\*) do type %%x\content_? | grep "<airport_code>" | gawk "{gsub(/  <airport_code>/, \"\"); print}" | gawk "{gsub(/<\/airport_code>/, \"\"); print}"  

将读取所有xml文件的机场代码。

我如何查看每个机场代码的键值对中的值并添加适当的时区元素?这可能吗?任何帮助非常感谢。

1 个答案:

答案 0 :(得分:0)

我设法自己解决这个问题,但只能切换到powershell。感谢评论和改进,以及在cmd中做事的建议:

foreach ($i in get-childitem $loc -recurse){
    if ($i.name -match "content_"){
        $content = get-content $i.FullName
        $airportcode=get-content $i.FullName | select-string -pattern "<airport_code>"
        $airportcode= $airportcode -replace "<airport_code>", "" 
        $airportcode= $airportcode -replace "</airport_code>", ""
        $airportcode= $airportcode -replace "  ", ""
        $timezone=$timezones.Get_Item("$airportcode")
        $newContent = $content -replace "</airports>", ""
        $newContent = $newContent -replace "  ","`n  "
        $newContent="$($newContent)`n<timezone>$($timezone)</timezone>`n</airports>"
        Set-Content $i.FullName $newContent
    } 
}

请注意,这也会删除关闭元素标记&lt; / Airports&gt;然后在最后将其附加到文档中。