You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Windows PowerShell中对每日JS数据文件做预处理并按月合并?

问题

我每日会生成一个JS格式的数据文件,内容示例如下:

m[mi++]="26.03.23 23:55:00|0;0;0;2720;0;0;0|488;0;3270"
m[mi++]="26.03.23 23:50:00|0;0;0;2720;0;0;0|1360;0;3220"
m[mi++]="26.03.23 23:45:00|0;0;0;2720;0;0;0|192;0;3110"
...

我希望将所有文件按月合并为一个文件,目前用Windows PowerShell的cat *.js > 2023_04.csv命令可以实现基本合并,但合并前需要完成以下操作:

  1. 反转文件行顺序,让时间从升序排列(原数据是降序)
  2. 移除每行开头的m[mi++]="
  3. 移除每行结尾的"
  4. 将每行中的|替换为;

请问以上操作能否在PowerShell中实现?如果不行,最佳的脚本实现方案是什么?


回答

完全可以在PowerShell中实现所有需求,用一条管道命令就能搞定:

Get-ChildItem -Filter *.js | Get-Content | ForEach-Object {
    # 移除首尾冗余字符并替换分隔符
    $_ -replace '^m\[mi\+\+\]="', '' -replace '"$', '' -replace '\|', ';'
} | Sort-Object | Out-File -FilePath "2023_04.csv" -Encoding utf8

命令细节解释:

  • Get-ChildItem -Filter *.js:批量获取当前目录下所有JS格式文件
  • Get-Content:读取每个文件的所有行内容
  • ForEach-Object 块:对每行执行三项文本处理:
    • ^m\[mi\+\+\]=":匹配行首的m[mi++]="并移除(正则中特殊字符需转义)
    • "$:匹配行尾的"并移除
    • \|:匹配所有|并替换为;
  • Sort-Object:默认按升序排序,刚好把原数据的时间降序转为升序
  • Out-File:将处理后的内容写入目标CSV文件,指定utf8编码避免中文或特殊字符乱码

如果原文件内的行是严格按时间倒序排列,也可以用[Array]::Reverse()反转行顺序,效率更高:

$processedLines = Get-ChildItem -Filter *.js | Get-Content | ForEach-Object {
    $_ -replace '^m\[mi\+\+\]="', '' -replace '"$', '' -replace '\|', ';'
}
[Array]::Reverse($processedLines)
$processedLines | Out-File -FilePath "2023_04.csv" -Encoding utf8

额外提示:

  • 如果JS文件中存在非目标格式的行(比如注释、其他代码),可以在处理前加过滤:Where-Object { $_ -match '^m\[mi\+\+\]="' },只处理符合格式的数据行
  • 避免用纯重定向>输出文件,它会默认使用系统编码(通常是GBK),容易导致乱码,Out-File能更灵活指定编码

内容的提问来源于stack exchange,提问作者SNWBRDR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 09:27:43