Powershell 文件输出大小的两倍

标签 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 放在具有特定状态的行上并将其放入 headless 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帖子,但没有一个真正适合我。

最佳答案

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

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

关于Powershell 文件输出大小的两倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23023364/

相关文章:

r - 将R数据作为csv直接写入s3

datetime - 具有特定日期/时间范围的PowerShell脚本

powershell - 将 ppt 转换为 PDF 时出现错误

javascript - Node JS 如何在生成的子进程(powershell 脚本)中调用函数?

java - 使用可选条目解析分隔输入

python - 使用 csv writer 时从迭代器中删除双引号

parsing - 带有转义逗号的 Clojure csv

powershell - 通过Powershell获取时间信息

powershell - XPath表达式将不接受变量

php - 将 PHP 和 MySQL 创建的 CSV 保存到服务器