[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 更新:批处理把文档按要求合并,这个感觉好难!,大神们一起看看

本帖最后由 WYXpclOK 于 2015-11-20 22:52 编辑

我的文件夹DATAS里有文档:
AA-A1-A1-01.CSV
AA-A1-A1-02.CSV
AA-A1-A1-03.CSV
BB-B1-B1-01.CSV
BB-B1-B1-02.CSV
CC-C2-C2-02.CSV
CC-C2-C2-03.CSV
DD-D4-D4-01.CSV
........
等此类CSV文档
每个文档的内容都是如下格式:
AA-A1-A1-01的内容:
AA-A1-A1-01                                                                              
AA-A1-A1-01
X,Y,COMP,B,F1-1,F1-2,F1-3,F2,F3,IR,F4,IV,W1,W2,C,W
0XXXXXXXXXXXXXXXXXXXXX
1XXXXXXXXXXXXXXXXXXXXX
2XXXXXXXXXXXXXXXXXXXXX
3XXXXXXXXXXXXXXXXXXXXX
.........
AA-A1-A1-02的内容:
AA-A1-A1-02              
AA-A1-A1-02
X,Y,COMP,B,F1-1,F1-2,F1-3,F2,F3,IR,F4,IV,W1,W2,C,W
0XXXXXXXXXXXXXXXXXXXXX
1XXXXXXXXXXXXXXXXXXXXX
2XXXXXXXXXXXXXXXXXXXXX
3XXXXXXXXXXXXXXXXXXXXX
.........
要求1:让文档按照:AA-A1-A1-01+AA-A1-A1-02+AA-A1-A1-03    BB-B1-B1-01+BB-B1-B1-02   CC-C2-C2-01+CC-C2-C2-03方式合并文档,也就是说要名字除了-01,-02,-03等的序号不一样其他的名字都要一样才可以合并.
要求2:文档合并后的文档到另一文件夹中,名字为-01序号前的名字如:(AA-A1-A1)并且内容只保留第一个文档的前三行,第二或者第三个文档的前三行不要,后面的内容接第一个文档最后一行的下一行.例如:
合并AA-A1-A1-01+AA-A1-A1-02+AA-A1-A1-03后新的文档名字为AA-A1-A1
且内容:
AA-A1-A1-01                                                                              
AA-A1-A1-01
X,Y,COMP,B,F1-1,F1-2,F1-3,F2,F3,IR,F4,IV,W1,W2,C,W
0XXXXXXXXXXXXXXXXXXXXX
1XXXXXXXXXXXXXXXXXXXXX
2XXXXXXXXXXXXXXXXXXXXX
3XXXXXXXXXXXXXXXXXXXXX
.........
0XXXXXXXXXXXXXXXXXXXXX
1XXXXXXXXXXXXXXXXXXXXX
2XXXXXXXXXXXXXXXXXXXXX
3XXXXXXXXXXXXXXXXXXXXX
.........
0XXXXXXXXXXXXXXXXXXXXX
1XXXXXXXXXXXXXXXXXXXXX
2XXXXXXXXXXXXXXXXXXXXX
3XXXXXXXXXXXXXXXXXXXXX
.........
要求3:在合并时要像附件里图片那样,如果在输入需要合并的文档名称时在DATAS文件里没有这个文档要提示“找不到此文件请确认重新输入”,如果有就继续下一步。还要循环使用;批处理可以在任何地方,不要在DATAS文件夹里,也就是说可以指定要合并文档的所在文件夹路径,和合并文档后存放的路径。

附件有更新:链接: http://pan.baidu.com/s/1jGnRo8Y 密码: 5rn1
希望大家帮我看看这个应该怎么写!!!

回复 25# WYXpclOK


    请举例说明24楼代码哪里不行

TOP

有人知道吗

TOP

回复 24# terse


    你这样写是不行的,好像要用到for命令,可是我还不会用

TOP

回复 23# WYXpclOK
这样?
  1. @echo off
  2. :st1
  3. set "ph1=E:\C"
  4. set "ph2=E:\A"
  5. set "ph3=E:\B"
  6. ::要合并的文档来源路径
  7. set /p new_name=请输入你要创建的文件名:
  8. set "new_name=%ph1%\%new_name%.csv"
  9. md "%ph1%" 2>nul
  10. setlocal enabledelayedexpansion
  11. :start
  12. set /a n+=1
  13. set /p filename%n%=请输入你想要合并的文档%n%:
  14. if not exist "%ph2%\!filename%n%!.csv" (
  15.    if not exist "%ph3%\!filename%n%!.csv" (
  16.       if defined filename%n% (
  17.          echo;输入错误 !filename%n%!.csv 文件不存在
  18.          set "filename%n%="
  19.          set/a n-=1
  20.          set /p f=如需重新输入文件名请输入Y 退出按回车。
  21.          if /i "!f!" neq "Y" goto end
  22.          set "f="
  23.       ) else set/a n-=1&goto end
  24.    else (
  25.      if !n! equ 1 (
  26.         copy /b "%ph3%\!filename%n%!.csv" "%new_name%" >nul
  27.      ) else more +3 "%ph3%\!filename%n%!.csv" >> "%new_name%"
  28. ) else (
  29.     if !n! equ 1 (
  30.        copy /b "%ph2%\!filename%n%!.csv" "%new_name%" >nul
  31.     ) else more +3 "%ph2%\!filename%n%!.csv" >> "%new_name%"
  32. )
  33. (for /f %%i in ('findstr /v $ "%new_name%"') do echo.)>>"%new_name%"
  34. goto start
  35. :end
  36. echo;%n% 个文件合并到 "%new_name%"
  37. endlocal
  38. set /p f=继续合并新文件输入Y 退出按回车。
  39. if /i "%f%" == "y" set f=&goto st1
复制代码

TOP

回复 21# terse

最后结果
  1. @echo off
  2. :st1
  3. set "ph1=E:\C"
  4. set "ph2=E:\A"
  5. ::要合并的文档来源路径
  6. set /p new_name=请输入你要创建的文件名:
  7. set "new_name=%ph1%\%new_name%.csv"
  8. md "%ph1%" 2>nul
  9. setlocal enabledelayedexpansion
  10. :start
  11. set /a n+=1
  12. set /p filename%n%=请输入你想要合并的文档%n%:
  13. if not exist "%ph2%\!filename%n%!.csv" (
  14.    if defined filename%n% (
  15.       echo;输入错误 !filename%n%!.csv 文件不存在
  16.       set "filename%n%="
  17.       set/a n-=1
  18.       set /p f=如需重新输入文件名请输入Y 退出按回车。
  19.       if /i "!f!" neq "Y" goto end
  20.       set "f="
  21.    ) else set/a n-=1&goto end
  22. ) else (
  23.     if !n! equ 1 (
  24.        copy /b "%ph2%\!filename%n%!.csv" "%new_name%" >nul
  25.     ) else more +3 "%ph2%\!filename%n%!.csv" >> "%new_name%"
  26. )
  27. (for /f %%i in ('findstr /v $ "%new_name%"') do echo.)>>"%new_name%"
  28. goto start
  29. :end
  30. echo;%n% 个文件合并到 "%new_name%"
  31. endlocal
  32. set /p f=继续合并新文件输入Y 退出按回车。
  33. if /i "%f%" == "y" set f=&goto st1
复制代码
追问:如果在要合并的文档来源路径那里追加一个路径E:\B应该怎样写,就是在E:\A和E:\B里都去找一下要合并的文档

TOP

回复 21# terse


    非常感谢,你的完全符合我的要求

TOP

那你在代码28行下面加一行试试
  1. (for /f %%i in ('findstr /v $ "%new_name%"') do echo.)>>"%new_name%"
复制代码

TOP

回复 19# terse


    你这合并后文档内容是接着第一个文档的最后一行加的,我需要换行接着加的,看附件
链接: http://pan.baidu.com/s/1sjQTrjf 密码: 1bc6

TOP

  1. @echo off
  2. :st1
  3. rem 默认创建文档到当前文件夹
  4. set "ph1=%cd%\"
  5. set /p ph1=请输入创建文档的路径:(如:c:\test\datst)
  6. :st2
  7. set /p ph2=请输入你要合并的文档路径:(如:d:\test\datst)
  8. if not exist %ph2%\ echo;输入错误 & goto st2
  9. set /p new_name=请输入你要创建的文件名:
  10. set "new_name=%ph1%\%new_name%.csv"
  11. md "%ph1%" 2>nul
  12. setlocal enabledelayedexpansion
  13. :start
  14. set /a n+=1
  15. set /p filename%n%=请输入你想要合并的文档%n%:
  16. if not exist "%ph2%\!filename%n%!.csv" (
  17.    if defined filename%n% (
  18.       echo;输入错误 !filename%n%!.csv 文件不存在
  19.       set "filename%n%="
  20.       set/a n-=1
  21.       set /p f=如需重新输入文件名请输入Y 退出按回车。
  22.       if /i "!f!" neq "Y" goto end
  23.       set "f="
  24.    ) else set/a n-=1&goto end
  25. ) else (
  26.     if !n! equ 1 (
  27.        copy /b "%ph2%\!filename%n%!.csv" "%new_name%" >nul
  28.     ) else more +3 "%ph2%\!filename%n%!.csv" >> "%new_name%"
  29. )
  30. goto start
  31. :end
  32. echo;%n% 个文件合并到 "%new_name%"
  33. endlocal
  34. set /p f=继续合并新文件输入Y 退出按回车。
  35. if /i "%f%" == "y" set f=&goto st1
复制代码

TOP

下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

不要沉,顶上去

TOP

回复 15# 回家路上


    没事,大家一起来看看

TOP

哦,你要求的太难了,不会
人生是一部书/只有这一页最温暖/读懂它的时候/我们在远方流泪...

TOP

还是请看看我的要求吧

TOP

返回列表