标题: [文件操作] 批处理如何在指定文件列表的前提下遍历目录合并同名文件? [打印本页]
作者: 那谁谁 时间: 2015-10-28 00:27 标题: 批处理如何在指定文件列表的前提下遍历目录合并同名文件?
求帮助,如何在指定文件列表的前提下遍历目录合并同名文件?
各位仙翁:
本人工作中经常要从大量报表数据包zip中查询和汇总报表,由于下辖十个门店,每个门店的报表每天更新一次,生成一个以日期命名的zip包,包中文件以csv格式存在,通常一个包里有40个文件(不固定,有些报表不是天天有),分别代表不同种类的数据。
每月至少要汇总两次报表,按种类汇总十个门店十五天内的同名报表,然后再做相关分析,这项工作不胜其烦。现在老板要求把近百个门店的分析工作统一管理,工作量一下增加十倍,所以希望寻求帮助。
下面我把目录结构简单描述一下(,当然,如果可以有代码直接从zip包中提取文件合并就更好了,不能的话,解压文件将可生成对应zip文件名的目录。)
子目录样式和其下文件样式:
20150901-01 (意思是01号门店9月1日的日报)
a0001.csv
a0002.csv
a0003.csv
a0004.csv
a0005.csv
......
20150901-02
a0003.csv
a0004.csv
a0005.csv
.....
第一层需求:若作为当前目录的子目录,希望可以遍历目录,把同名文件(按目录名称的升序)合并后存放到一个汇总目录中?(合并的文件名加“汇总”前缀,比如所有目录下按 a0004.csv合并的文件,命名为:“汇总a0004.csv”)
第二层需求:有时不一定要全部文件名都实现合并,是否可以用一个配置文件指定需合并的文件名的列表,由命令读取并执行,灵活定制合并文件的集合?
作者: terse 时间: 2015-10-28 10:25
合并你用copy
作者: 那谁谁 时间: 2015-10-28 21:12
回复 2# terse
copy,谢谢,当然,
但一行一行地写,涉及几个文件就得写几行,要是一百个门店,365天,那就得写36500行,诚然是可以执行,但那算什么批处理呢?
作者: terse 时间: 2015-10-28 22:33
回复 3# 那谁谁
你是合并同日期同文件名 还是不同日期的同文件名呢?
初步思路 for 循环 dir 然后 copy
同日期同文件名的话 列表文件数应该不超过压缩包里文件的数量 并非如你所说的累加
作者: terse 时间: 2015-10-28 23:52
不保证通用
先读取A.txt
a.txt 内容 如下格式
20151001 1.csv 3.csv
20151002 1.csv 3.csv- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1*" %%a in (a.txt) do (
- for %%i in (%%b) do (
- set "cp="
- for /d %%j in (%%a-*) do (
- if exist "%%j\%%i" set cp=!cp!+"%%j\%%i"
- )
- if defined cp copy /b !cp:~1! "汇总-%%a-%%i.csv"
- )
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |