0

一連の個別のディレクトリに、content_ [0-9](コンテンツの下線とそれに続く1桁の数字)という名前のxmlファイルがあります。これらのファイルにはすべて、次のような単一のairport_code要素があります。

<airport_code>JFK</airport_code>

次に、次のようなKey-Valueマッピングがあります。

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 に答える