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

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

[复制链接]
 楼主| 发表于 2015-11-20 22:51:10 | 显示全部楼层
回复 15# 回家路上


    没事,大家一起来看看
 楼主| 发表于 2015-11-21 20:42:33 | 显示全部楼层
不要沉,顶上去
发表于 2015-11-25 00:13:44 | 显示全部楼层
发表于 2015-11-25 11:35:53 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2015-11-29 12:19:08 | 显示全部楼层
回复 19# terse


    你这合并后文档内容是接着第一个文档的最后一行加的,我需要换行接着加的,看附件
链接: http://pan.baidu.com/s/1sjQTrjf 密码: 1bc6
发表于 2015-11-29 12:39:51 | 显示全部楼层
那你在代码28行下面加一行试试
  1. (for /f %%i in ('findstr /v $ "%new_name%"') do echo.)>>"%new_name%"
复制代码
 楼主| 发表于 2015-11-30 13:43:35 | 显示全部楼层
回复 21# terse


    非常感谢,你的完全符合我的要求
 楼主| 发表于 2015-12-3 13:03:32 | 显示全部楼层
回复 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里都去找一下要合并的文档
发表于 2015-12-3 13:57:51 | 显示全部楼层
回复 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
复制代码
 楼主| 发表于 2015-12-4 08:55:32 | 显示全部楼层
回复 24# terse


    你这样写是不行的,好像要用到for命令,可是我还不会用
 楼主| 发表于 2015-12-6 15:35:08 | 显示全部楼层
有人知道吗
发表于 2015-12-6 17:16:53 | 显示全部楼层
回复 25# WYXpclOK


    请举例说明24楼代码哪里不行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 06:50 , Processed in 0.017739 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表