Board logo

标题: [文件操作] 批处理怎样合并同名文件? [打印本页]

作者: zhjg5961    时间: 2013-6-10 19:55     标题: 批处理怎样合并同名文件?

老师:能不能把“Base文件夹”下面的同名字的文件(后缀名不一样)合并成一个.TXT文件放到一个文件夹中?
作者: CrLf    时间: 2013-6-10 21:43

本帖最后由 CrLf 于 2013-6-10 22:42 编辑

举个栗子
  1. @echo off
  2. cd /d d:\base\
  3. (for /r %%a in (*) do type "%%a">>"d:\base\%%~na_合并.txt")2>nul
  4. pause
复制代码

作者: zhjg5961    时间: 2013-6-11 13:15

回复 2# CrLf


    不行,提示“系统找不到文件”。
作者: Batcher    时间: 2013-6-13 21:21

回复 3# zhjg5961


    你的base文件夹的完整路径是什么?如果描述不清楚,请给个截图。
作者: Batcher    时间: 2013-6-13 21:35

回复 5# zhjg5961


代码保存为test.bat
把test.bat放到base文件夹里面
  1. @echo off
  2. cd /d "%~dp0"
  3. for %%a in (*) do (
  4.     type "%%a" >> "拷贝并合并的文件\%%~na.txt"
  5. )
复制代码

作者: zhjg5961    时间: 2013-6-13 21:41

回复 6# Batcher


    不对,啥也没有拷贝出来
作者: Batcher    时间: 2013-6-13 21:46

回复 7# zhjg5961
  1. cd /d "%~dp0"
  2. for %%a in (*) do (
  3.     echo "%%a" "..\拷贝并合并的文件\%%~na.txt"
  4.     type "%%a" >> "..\拷贝并合并的文件\%%~na.txt"
  5.     pause
  6. )
  7. pause
复制代码
1、确保这个test.bat的编码格式是ANSI
2、把执行过程贴出来看看
作者: zhjg5961    时间: 2013-6-13 21:52

回复 8# Batcher

    老师:我想把程序这样放。
作者: Batcher    时间: 2013-6-13 21:54

回复 9# zhjg5961
  1. @echo off
  2. cd /d "%~dp0"
  3. for %%a in (Base\*) do (
  4.     type "%%a" >> "拷贝并合并的文件\%%~na.txt"
  5. )
  6. pause
复制代码

作者: zhjg5961    时间: 2013-6-13 22:03

回复 10# Batcher

拷贝的有问题?
作者: Batcher    时间: 2013-6-13 22:05

回复 11# zhjg5961


    检查一下你的.001、.002等文件是不是ANSI编码。
作者: Batcher    时间: 2013-6-13 22:10

回复 13# zhjg5961


    看这个没用。用记事本打开一个文件,左上角菜单里“文件”,“另存为”,可以看到是不是ANSI编码。
作者: Batcher    时间: 2013-6-13 22:13

如果你确定所有的文件都是ANSI编码:
  1. @echo off
  2. cd /d "%~dp0"
  3. for %%a in (Base\*) do (
  4.     type "%%a" >> "拷贝并合并的文件\%%~na.txt"
  5.     echo,>>"拷贝并合并的文件\%%~na.txt"
  6. )
  7. pause
复制代码

作者: Batcher    时间: 2013-6-13 22:14

回复 15# zhjg5961


    我是让你打开处理之前的.001、.002等文件,12楼说的不够清楚吗?
作者: Batcher    时间: 2013-6-13 22:33

回复 19# zhjg5961


    请把所有的原始文件(不是处理之后的txt文件)压缩一下传到网盘里面,我会下载下来自己看看。
作者: zhjg5961    时间: 2013-6-13 22:34

回复 20# Batcher


    我没有传过网盘,不知道怎么传的。
作者: Batcher    时间: 2013-6-13 22:43

回复 21# zhjg5961


    OK,那就等你学会之后我们继续研究这个问题吧。
作者: CrLf    时间: 2013-6-13 22:53

回复 21# zhjg5961


    百度网盘,很好用的,不是打广告
作者: xxpinqz    时间: 2013-6-14 07:18

~~~
LZ,打开记事本,随便拖一个base目录下的文件到记事本内,点击另存为,就看到编码了
作者: batman    时间: 2013-6-14 08:06

论坛又出现了一位热心人,赞楼上一个。。。
作者: Batcher    时间: 2013-6-16 21:31

回复 27# zhjg5961


    你这些文件是纯文本文件吗?或者是你压缩的时候出了问题?我下载了2、3、11,发现打开之后都是乱码。
作者: zhjg5961    时间: 2013-6-16 21:50

回复 26# Batcher

请老师把文件1到文件13下载后解压到一个文件夹中,单击文件13即可以自动合并文件了。
作者: Batcher    时间: 2013-6-16 22:40

回复 29# zhjg5961


    少了11不行吧。你把文件压缩成一个rar,上传到百度网盘。
作者: zhjg5961    时间: 2013-6-16 23:30     标题: 合并文件

老师:能不能把“Base文件夹”下面的同名字的文件(后缀名不一样)合并成一个.TXT文件放到一个文件夹中?
作者: zhjg5961    时间: 2013-6-16 23:43

本帖最后由 zhjg5961 于 2013-6-17 00:08 编辑

回复 1# zhjg5961
模拟文件地址:
http://pan.baidu.com/share/link?shareid=1415468290&uk=2485578287

密码:6jx8
作者: xxpinqz    时间: 2013-6-16 23:54

你在原帖里头跟就好了,再开新帖,别人看不懂你说什么。
而且,提取码也没写出来,叫人怎么下~
作者: zhjg5961    时间: 2013-6-17 00:40

回复 28# Batcher


    http://pan.baidu.com/share/link?shareid=1415468290&uk=2485578287

密码:6jx8
作者: Batcher    时间: 2013-6-17 00:45

回复 32# zhjg5961


    请你亲自打开600220.f10看看
作者: zhjg5961    时间: 2013-6-17 01:01

回复 33# Batcher


   老师: 能不能编写出来后缀名按下面顺序排列合并的:002——010——005——001——014
作者: Batcher    时间: 2013-6-17 08:39

回复 34# zhjg5961
  1. @echo off
  2. cd /d "%~dp0"
  3. for %%i in (002 010 005 001 014) do (
  4.     for %%j in ("Base\*.%%i") do (
  5.         type "%%j" >> "拷贝并合并的文件\%%~nj.txt"
  6.         echo,>>"拷贝并合并的文件\%%~nj.txt"
  7.     )
  8. )
  9. pause
复制代码

作者: xxpinqz    时间: 2013-6-17 09:32

貌似可以这样
  1. for %%a in (002 010 005 001 014) do (
  2.    copy "base\*.%%a" "按类合并\all%%a.txt"
  3. )
复制代码
f10好像是股票软件生成的2进制文件,才显示乱码。里面内容应该没必要添加。
作者: zhjg5961    时间: 2013-6-17 09:37

回复 35# Batcher


    老师:为什么没有“拷贝并合并的文件”这个文件夹你编写的程序就不能用了呢?
作者: zhjg5961    时间: 2013-6-17 09:42

回复 33# Batcher

老师:为什么没有“拷贝并合并的文件”这个文件夹你编写的程序就不能用了呢?
作者: zhjg5961    时间: 2013-6-17 09:43

回复 35# Batcher

老师:为什么没有“拷贝并合并的文件”这个文件夹你编写的程序就不能用了呢?
作者: zhjg5961    时间: 2013-6-17 09:43

回复 35# Batcher

老师:为什么没有“拷贝并合并的文件”这个文件夹你编写的程序就不能用了呢?
作者: zhjg5961    时间: 2013-6-17 09:52

回复 36# xxpinqz

原来的文件名请不要改。
作者: Batcher    时间: 2013-6-17 10:44

回复 39# zhjg5961
  1. @echo off
  2. cd /d "%~dp0"
  3. md 拷贝并合并的文件 2>nul
  4. for %%i in (002 010 005 001 014) do (
  5.     for %%j in ("Base\*.%%i") do (
  6.         type "%%j" >> "拷贝并合并的文件\%%~nj.txt"
  7.         echo,>>"拷贝并合并的文件\%%~nj.txt"
  8.     )
  9. )
  10. pause
复制代码

作者: zhjg5961    时间: 2013-6-17 13:24

回复 42# Batcher


谢谢老师!
我先试试,有问题再麻烦你。
作者: Batcher    时间: 2013-6-17 13:48

回复 43# zhjg5961


    不用单独发私信。直接回复我的帖子就行了,论坛程序会提醒我的。
作者: zhjg5961    时间: 2013-6-17 17:49

回复 16# Batcher

老师:
这个程序(16楼的)拷贝合并出来后,我仔细看了,不是按顺序合并的,能不能做到从小到大的顺序排序合并。
即:001——002——003——004——005——006——007——008——009——010——011——012——013——014——015——016——f10这样排序。
作者: terse    时间: 2013-6-17 18:05

本帖最后由 terse 于 2013-6-17 20:07 编辑

楼主全部合并 可不可以这样?
改为直接COPY 遍历后缀001文件 -- copy
  1. @echo off
  2. rd 合并的文件 2>nul
  3. md 合并的文件 2>nul
  4. for %%i in (base\*.001) do (
  5. copy "Base\%%~ni.*" "合并的文件\%%~ni.txt
  6. )
  7. pause
复制代码
排序的话
感觉copy 比 TYPE 来的快些
  1. @echo off
  2. set "files=合并的文件"
  3. set "exts=base\*.002 base\*.010 base\*.005 base\*.001 base\*.014"
  4. rd /s /q %files% 2>nul
  5. md %files% 2>nul
  6. for /f "delims=" %%i in ('dir /b /a-d %exts%') do (
  7.      if exist "%files%\%%~ni.txt" (
  8.         copy /b "%files%\%%~ni.txt"+"base\%%i" "%files%\%%~ni.txt" >nul
  9.      ) else copy /b "base\%%i" "%files%\%%~ni.txt" >nul
  10. )
  11. pause
复制代码

作者: Batcher    时间: 2013-6-17 20:48

回复 45# zhjg5961


    你把这些数字按照42楼的格式放在第四行就行了
作者: zhjg5961    时间: 2013-6-17 21:08

回复 47# Batcher


哦!
就是说按照16楼的方法是做不到的。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2