0

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

<airport_code>JFK</airport_code>

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

JFK=US/Eastern
LHR=Europe/London
etc

我想循环浏览所有这些 xml 文件并将正确的时区元素附加到每个 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 文件的机场代码。

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

4

1 回答 1

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
    } 
}

请注意,这也会删除结束元素标记 </airports>,然后将其附加到文档末尾。

于 2012-06-22T15:32:32.873 回答