Powershell文件输出两倍大小

时间:2014-04-11 22:05:32

标签: powershell csv

背景

我有一个管道分隔的csv文件,如下所示:

ColA|ColB|ColC|ColD|ColE|ColF|ColG|ColH|ColI|ColJ|ColK
00000000|000000507|0000000|STATUS|0000|000000|000|0000|00|0000|00000
00000000|000000500|0000000|STATUS|0000|000000|000|0000|00|0000|00000
00000000|000007077|0000000|STATUS|0000|000000|000|0000|00|0000|00000

我想将ColB放在具有特定状态的行上并将其放在像这样的无头csv文件中:

000000507,0000000001,0,0
000000500,0000000001,0,0
000007077,0000000001,0,0

该行末尾的值0000000001,0,0对于每个项目都是相同的。

剧本

脚本的修剪版/通用版看起来像这样:

$infile = Import-Csv ".\incsv.txt" -Delimiter '|'
$outfile = ".\outcsv.txt"

Foreach($inline in $infile){
  If($inline.Status -ne 'Some Status'){
    $outline = $inline.'ColB' + ',0000000001,0,0'
    Add-Content $outfile $outline -Encoding ASCII
  }
}

问题

问题是创建的新文件大小应该是它应该的大小的两倍,我知道它与编码有关。不幸的是,我无法找到有效的编码。我已尝试-Encoding ASCII-Encoding Default-Encoding UTF8,但它们都太大了。

这不是一个问题,但是读取创建的文本文件的程序不会正确读取它。

我可以做的是从记事本中复制新文件中的文本,将其另存为ANSI,并且工作正常。但ANSI不是-Encoding参数中的一个选项。

如何让Powershell输出正确的文件类型?有没有更好的方法来解决这个问题?

我发现了this Google Groups conversationthis Social TechNet帖子,但实际上没有人为我工作。

1 个答案:

答案 0 :(得分:2)

如果输出文件已存在并且是Unicode格式,则在附加到文件时将忽略参数-Encoding ASCII。将你的循环改为:

$infile | % {
  if ($_.Status -ne 'Some Status') {
    $_.'ColB' + ',0000000001,0,0'
  }
} | Set-Content $outfile -Encoding ASCII