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

[文本处理] [已解决]批处理如何分割大文本到各个文件夹?

[复制链接]
发表于 2013-3-23 16:23:07 | 显示全部楼层 |阅读模式
所谓大文本是指: 有几万行的 txt文档。

需要进行如下处理:

从大文本 第一行开始,
每20行分割为一个txt文件, 取名从1.txt, 2.txt,3.txt....到46.txt, 并保存到1文件夹下
然后重复分割另一份的1.txt, 2.txt,到46.txt,保存到2文件夹下,3文件夹,4文件夹 。。。。, 直到把大文本全部分割完


我手头上已经有下面这个,平均分割大文本 到每个小文本文档,供参考
  1. @echo off&setlocal enabledelayedexpansion
  2. set m=1
  3. for /f "delims=" %%i in (result.txt) do (
  4.      set /a n+=1
  5.      if !n! leq 20 echo %%i>>a_!m!.txt
  6.      if !n! equ 20 set n=0&set /a m+=1
  7. )
  8. echo 终于搞定!
  9. pause>nul
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-3-23 18:18:31 | 显示全部楼层
本帖最后由 apang 于 2013-3-23 19:30 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set /a s=1,m=1
  3. for /f "delims=" %%a in (a.txt) do (
  4.   set /a "n+=1,1/(n-21)" 2>nul||set /a n=1,m+=1
  5.   if !m!==47 set /a s+=1,m=1
  6.   md !s! 2>nul
  7.   echo,%%a>>!s!\!m!.txt
  8. )
  9. pause
复制代码
vbs,速度比bat快很多。实测10000行文本,vbs用时4秒5,bat用时12秒8
  1. Set FSO = CreateObject("Scripting.FileSystemObject")
  2. Set File = FSO.OpenTextFile("a.txt",1)
  3. s = 1 : m = 1
  4. Do Until File.atEndOfStream
  5.    Str = File.ReadLine
  6.    n = n + 1
  7.    If n = 21 Then m = m + 1 : n = 1
  8.    If m = 47 Then s = s + 1 : m = 1
  9.    If Not FSO.FolderExists(s) Then FSO.CreateFolder(s)
  10.    FSO.OpenTextFile(s & "" & m & ".txt",8,True).WriteLine Str
  11. Loop

  12. MsgBox "OK"
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2013-3-23 18:59:33 | 显示全部楼层
最长的单行大概有多长?
发表于 2013-3-23 23:30:03 | 显示全部楼层
本帖最后由 apang 于 2013-3-23 23:42 编辑

减少写文件次数,10000行的TXT文本,用时0.42秒
  1. Set FSO = CreateObject("Scripting.FileSystemObject")
  2. Set File = FSO.OpenTextFile("a.txt",1)
  3. s = 1 : m = 1

  4. Do Until File.atEndOfStream
  5.    n = n + 1
  6.    Str = Str & File.ReadLine & vbCrLf
  7.    If n = 20 Then
  8.       If Not FSO.FolderExists(s) Then FSO.CreateFolder(s)
  9.       FSO.OpenTextFile(s & "" & m & ".txt",2,True).Write Str
  10.       m = m + 1 : n = 0 : str = ""
  11.    End If
  12.    If m > 46 Then s = s + 1 : m = 1
  13. Loop

  14. If Str <> "" Then
  15.    If Not FSO.FolderExists(s) Then FSO.CreateFolder(s)
  16.    FSO.OpenTextFile(s & "" & m & ".txt",2,True).Write Str
  17. End If

  18. MsgBox "OK"
复制代码
 楼主| 发表于 2013-3-24 09:15:25 | 显示全部楼层
回复 2# apang


    非常感谢, 可以使用。
 楼主| 发表于 2013-3-24 09:15:52 | 显示全部楼层
回复 3# CrLf


    文本一行有一百到几百个单词吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 01:21 , Processed in 0.021063 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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