2014-03-12 278 views
0

我有一堆xml文件,在每個文件中可能有多個變體(不同的語言區域代碼en-us,en-ca,en-gb等)我是新的PowerShell,所以我可能不理解幾個概念。輸出由製表符分隔的文本到文本文件

我可以提取所有這些信息,但我無法以我想要的格式輸出它。我曾嘗試使用Out-File,並已查看Export-Csv,但我只是無法讓它做我想做的事。任何幫助將不勝感激。

這是我想出來的格式(內容將被複制到Excel)

File Path | ar-ae | ar-sa | cs-cz | da-dk 
File 1   X  X     X 
File 2   X  X  X  X 
File 3     X   

所以基本上我想用頭是文件路徑和每種語言的表。然後,我想要列出所有文件,並在文件中存在的每個語言環境下放置一個X.

這是我的代碼

if (Test-Path ".\siteIA.txt") { 
Clear-Content ".\siteIA.txt" 
} 

$locales = @(
"ar-ae" 
"ar-sa" 
"cs-cz" 
"da-dk" 
"de-at" 
"de-ch" 
"de-de" 
"el-gr" 
"en-au" 
"en-ca" 
"en-gb" 
"en-hk" 
"en-ie" 
"en-in" 
"en-nz" 
"en-sg" 
"en-us" 
"en-za" 
"es-ar" 
"es-cl" 
"es-co" 
"es-es" 
"es-mx" 
"fi-fi" 
"fr-be" 
"fr-ca" 
"fr-ch" 
"fr-fr" 
"he-il" 
"hu-hu" 
"it-it" 
"ja-jp" 
"ko-kr" 
"nb-no" 
"nl-be" 
"nl-nl" 
"pl-pl" 
"pt-br" 
"pt-pt" 
"ru-ru" 
"sk-sk" 
"sv-se" 
"tr-tr" 
"zh-hk" 
"zh-tw" 
) 

$locales = $locales | sort 

$header = "Path`t" + $locales 

Get-ChildItem C:\Users\tests *.xml -recurse | 
% { 
    $outArray = @() 
    $file = [xml](Get-Content $_.fullname) 

    $path = $file.ExportedContentItem.path 
    $name = $file.ExportedContentItem.name 
    [email protected]() 

    $out = $path + "/" + $name + "`t" 

    $file.ExportedContentItem.ContentItem.Variant | % { 
     $availableLocales += $_.variantCulture 
    } 

    $availableLocales = $availableLocales | sort 

    foreach ($locale in $locales){ 
     if ($availableLocales -contains $locale){ 
      $out = "X" 
      Add-Content ".\siteIA.txt" "X`t" 
     } else { 
      $out = "" 
      Add-Content ".\siteIA.txt" "`t" 
     }  
    } 

    Add-Content ".\siteIA.txt" "T" 
    Add-Content ".\siteIA.txt" "E" 
    Add-Content ".\siteIA.txt" "S" 

} 
+0

那麼什麼是不工作在當前的代碼? – JNK

回答

1

如果你想輸出導入到Excel中後,最好簡單地創建一個TSV(製表符分隔值)文件。 Export-Csv cmdlet可以爲您做到這一點。

創建File Path自定義對象和語言環境作爲屬性,並設置所有那些名字在Variant節點都列出X性能。然後使用製表符作爲分隔符導出對象:

Get-ChildItem C:\Users\tests *.xml -recurse | % { 
    $contentItem = [xml](Get-Content $_.FullName).ExportedContentItem 

    $o = New-Object -Type PSObject -Property @{ 
    'File Path' = Join-Path $contentItem.Path $contentItem.Name 
    'ar-ae'  = '' 
    'ar-sa'  = '' 
    ... 
    'zh-hk'  = '' 
    'zh-tw'  = '' 
    } 

    $contentItem.ContentItem.Variant | % { 
    $o."$($_.variantCulture)" = "X" 
    } 

    $o 
} | Export-Csv 'C:\path\to\output.txt' -NoType -Delimiter "`t" 
相關問題