Board logo

标题: [文件管理] 批处理文本分割器 [打印本页]

作者: jcy0307    时间: 2010-5-17 00:18     标题: 批处理文本分割器

echo  献丑了
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. title 文本分割器 ****JCY0307****
  4. mode con: cols=45 lines=20
  5. ::批处理之家-http://bathome.l3.wuyou.com/
  6. color 0a
  7. :zcd
  8. cls
  9. echo.
  10. echo.
  11. echo.
  12. echo               ╭──────╮
  13. echo       ╭───┤ 文本分割器 ├───╮   
  14. echo       │      ╰──────╯      │
  15. echo       │     1.指定大小分割文本     │
  16. echo       │                            │
  17. echo       │     2.指定个数分割文本     │
  18. echo       │                            │
  19. echo       │     Q.退 出                │
  20. echo       │                            │
  21. echo       ╰──────────────╯   
  22. echo.
  23. echo       ────────────────
  24. echo.
  25. set zcd=
  26. set/p zcd=    请输入选项:
  27. if /i "%zcd%"=="1" goto kb
  28. if /i "%zcd%"=="2" goto gs
  29. if /i "%zcd%"=="q" exit
  30. if /i "%zcd%"=="" goto zcd
  31. :kb
  32. cls
  33. echo 输入Q返回主菜单
  34. set a=
  35. set/p a=请将文件拖入:
  36. if /i "%a%"=="q" goto zcd
  37. for %%i in (%a%) do set /a c=%%~zi/1024
  38. cls
  39. echo 文件大小:%c%KB
  40. ping -n 3 127.1>nul
  41. cls
  42. set b=
  43. set/p b=请设定分割后文件大小(KB):
  44. set /a e=%b%*1024
  45. set /a f=%c%/%b%
  46. cls
  47. echo 以%b%KB分割后,您将得到%f%个文件。3秒后开始分割.....
  48. ping -n 4 127.1>nul
  49. cls
  50. set d=1
  51. for %%i in (%a%) do set wjm=%%~ni
  52. for /f "delims=" %%j in (%a%) do (
  53. echo %%j>>%wjm%!d!.txt
  54. cls
  55. echo 正在分割 %wjm% 第!d!部分......
  56. for %%k in (%wjm%!d!.txt) do if %%~zk GEQ %e% set /a d+=1
  57. )
  58. cls
  59. echo 分割 %wjm% 完成,共分割出了!d!个文件!
  60. if not exist %wjm% md %wjm%
  61. move %wjm%*.txt %wjm%>nul 2>nul
  62. pause>nul
  63. goto zcd
  64. :gs
  65. cls
  66. echo 输入Q返回主菜单
  67. set a=
  68. set/p a=请将文件拖入:
  69. if /i "%a%"=="q" goto zcd
  70. cls
  71. echo 正在计算文本行数,请稍等......
  72. for /f "delims=" %%i in (%a%) do set/a b+=1
  73. cls
  74. set c=
  75. set/p c=请输入要得到的文件个数:
  76. set/a d=%b%/%c%+3
  77. cls
  78. echo 正在分割,请稍等......
  79. set e=1
  80. set f=0
  81. for %%k in (%a%) do set wjm=%%~nk
  82. for /f "delims=" %%j in (%a%) do (
  83. echo %%j>>%wjm%!e!.txt
  84. set/a f+=1
  85. if !f! GEQ %d% set/a e+=1 & set f=0
  86. )
  87. cls
  88. echo 分割完成
  89. if not exist %wjm% md %wjm%
  90. move %wjm%*.txt %wjm%>nul 2>nul
  91. pause>nul
  92. goto zcd
复制代码

作者: xiexiaolesky    时间: 2010-6-9 12:29     标题: 支持

顶下哈 呵呵 很实用 复制下来研究下 呵呵
作者: crartor    时间: 2010-6-10 10:21

貌似有漏洞哦:如果文本中有""^&等符号,那么在用echo 输出到文件时就会出问题……
作者: ZJHJ    时间: 2010-6-15 17:18

不可靠的,掉字符了。
作者: Batcher    时间: 2010-6-15 19:31     标题: 回复 4楼 的帖子

给个例子吧,让楼主修复一下。
作者: jcy0307    时间: 2010-6-17 23:40

谢谢各位的意见 过段时间再做修改 最近比较忙 也没时间搞这些了
郁闷死了 工作用的电脑硬盘烧了 数据恢复也不行了
哎。。。。
作者: ZJHJ    时间: 2010-6-21 13:46

RD  5楼

1  掉感叹号了
2  按字节分割有误差

如果改成下面的代码,可以解决不掉字符的问题。但是仍然不能准确分割,而且第2个文件不是%e% 。
for /f "delims=" %%a in ('findstr /n .*  "%a%"') do (
        set "var=%%a"
        setlocal enabledelayedexpansion
        set var=!var:*:=!
for %%k in (%wjm%!d!.txt) do if %%~zk GEQ %e% set /a d+=1
   echo.!var!>>%wjm%!d!.txt
endlocal
    )

不能准确分割有可能是在获取%%~zk 时 电脑刷新的原因。
看看哪位高手再出良策!!!

[ 本帖最后由 ZJHJ 于 2010-6-21 17:27 编辑 ]
作者: ZJHJ    时间: 2010-6-21 20:39

我已经发现不能准确分割的原因是:获取%%~zk 时,是以整行为基础的。
有点象 split -c 参数
作者: ZJHJ    时间: 2010-6-21 22:44

哈哈!终于搞定了。
等我把行分割一起贴出




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