2014-03-12 175 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" 
相关问题