【问题标题】:Merging CSV files with partly same filename合并文件名部分相同的 CSV 文件
【发布时间】:2015-01-29 08:35:01
【问题描述】:

我有一个包含 aprox 的目录。 1500 个带有测量数据的 csv 文件,如液位、压力、体积等。 每次测量每小时都会导出测量数据。 所以生成的 Level 文件名是 Levelxx.csv,其中 xx 的范围是 00-23 相同的方法适用于体积和压力以及所有其他测量,例如 volume00.csv - volume23.csv。 我想将给定测量的所有 24 个文件合并为一个,例如 level-day.csv、volume-day.csv 等。

命令:“copy /b level*.csv level-day.csv /y”适用于一组, 但是对于每个有 24 小时文件的更多测量,如何做到这一点? 文件名中唯一的共同点是 xx,其范围为 00-23。提前致谢

【问题讨论】:

    标签: csv batch-file merge batch-processing


    【解决方案1】:

    您可以简单地在 FOR 循环中迭代属性名称的静态列表。请注意,多个单词名称应括在引号内:

    @echo off
    for %%A in (
      level
      pressure
      volume
      "multiword name"
       etc.
    ) do copy /b %%A??.csv %%a-day.csv /y
    

    或者您可以动态发现属性的名称。

    假设每个属性总是有一个时间 00 文件:

    @echo off
    setlocal enableDelayedExpansion
    for %%A in (*00.csv) do (
      set "prop=%%~nA"
      set "prop=!prop:~0,-2!"
      copy /b "!prop!??.csv" "!prop!-day.csv"
    ) 
    

    如果时间 00 有时可能会丢失:

    @echo off
    setlocal enableDelayedExpansion
    
    :: Delete any existing -day files
    delete *-day??.csv 2>nul
    
    for /f "eol=: delims=" %%A in (
      'dir /b /a-d *.csv^|findstr "[^0-9][0-9][0-9]\.csv$"'
    ) do (
      set "prop=%%~nA"
      set "prop=!prop:~0,-2!"
      if not exist "!prop!-day.csv" copy /b "!prop!??.csv" "!prop!-day.csv"
    )
    

    【讨论】:

      猜你喜欢
      • 2018-08-31
      • 2014-03-21
      • 2013-10-10
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      • 2018-08-07
      • 2016-03-19
      • 2021-09-24
      相关资源
      最近更新 更多