合并具有部分相同文件名的CSV文件

时间:2015-01-29 08:35:02

标签: csv batch-file merge batch-processing

我有一个包含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。提前致谢

1 个答案:

答案 0 :(得分:0)

您可以简单地在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"
)