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

[文件操作] [已解决]批处理怎样按指定大小分割txt文档?

家有txt小说若干,常有学生下载到mp4或手机内存卡,一般没有问题。但时间一长,发现有个别的mp4和手机无法打开较长的文档。解决的办法就是将长文件切成若干个小文件。于是乎,不断的复制一小段内容,新建一个txt文档,打开这个新建的文档,粘贴,关闭,保存:然后周而复始地重复这个过程。也许一个小时或几个小时还没完成一部小说的下载,极其麻烦。希望能有一个小程序能一点就解决。大致想法是这样的:输入小说的地址和文件名,回车后,立刻产生一个同名文件夹,文件夹内是按100k切分的若干txt,名字为文件夹名加1、2、3....等,最后的那个文件当然会小于100k。(特别要求,每个切分的txt文档必须以中文句号、英文句号或中英文问号结束,这样可以保证文档的大小不超过100k,并且相对完整的结束。)
谢谢各位回答者和看客。

想来想去,也没想出什么思路。。。

TOP

C:\Test>split --help
Usage: split [OPTION] [INPUT [PREFIX]]
Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default
PREFIX is `x'.  With no INPUT, or when INPUT is -, read standard input.

  -b, --bytes=SIZE        put SIZE bytes per output file
  -C, --line-bytes=SIZE   put at most SIZE bytes of lines per output file
  -l, --lines=NUMBER      put NUMBER lines per output file
  -NUMBER                 same as -l NUMBER
      --verbose           print a diagnostic to standard error just
                            before each output file is opened
      --help              display this help and exit
      --version           output version information and exit

SIZE may have a multiplier suffix: b for 512, k for 1K, m for 1 Meg.

Report bugs to <[email]bug-textutils@gnu.org[/email]>.

split.exe
http://bbs.bathome.net/thread-1114-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. @echo off
  2. set/p file=请把要处理的文件拖到此处:
  3. for /f "delims=" %%a in ("%file:"=%") do (
  4.      md "%%~na"
  5.      split -a 3 -b 100k "%file:"=%" "%%~na\%%~na_"
  6.      ren "%%~na\*" "*.txt"
  7. )
  8. pause
复制代码
借助了第三方工具split.exe,用最合适的代码做最合适的事情吧。
请先下载3楼提供的下载链接,再运行此批处理。
心绪平和,眼藏静谧。

TOP

三楼BATCHER兄提供的链接中的split.exe没有-a参数,版本问题。。。
使用以下代码:
  1. @echo off
  2. set/p file=请把要处理的文件拖到此处:
  3. for /f "delims=" %%a in ("%file:"=%") do (
  4.      md "%%~na"
  5.      split  -b 100k "%file:"=%" "%%~na\%%~na_"
  6.      ren "%%~na\*" "*.txt"
  7. )
  8. pause
复制代码
心绪平和,眼藏静谧。

TOP

出效果了,pusofalse,辛苦你了。
虽然最后的效果还不是最满意的。
最满意的是题目要增加为***-1.txt,***_2.txt  ........,并且每篇文档只要求不超过100k,结尾需要以中文句号、英文句号或中英文问号结束,以显文档的相对完整。期待更多的高手。。。

TOP

有了5楼代码的基础,要完美解决你的问题,就是很简单的事了,
暂时没空,等会给你代码。。。
技术问题请到论坛发帖求助!

TOP

如果能不用第三方软件更好。

TOP

看来问题不是我想的那么简单。
split 不知道是如何控制文件大小的,我的a.txt内容全是时间这两个字,按说无法分割成 99k的文件才对啊?我分别测试分割成 99k 和 100k 发现文件每行的长度是一样的,只是行数不同,真奇怪?如果是通过控制回车的数量,那么行的长度应该不一样才对啊?

但如何楼主要求的是
“每篇文档只要求不超过100k,结尾需要以中文句号、英文句号或中英文问号结束,以显文档的相对完整”
倒不是没有解决办法,可以用split把文件分割成99k的文件,然后再在每个文件末尾追加一个半角句号就可以了。 不知道这样能否满足楼主要求?
至于文件名的问题则不是问题。。。
另外如果不用第三方软件来作的话,
首先文件内容中的特殊字符就是一个大问题,
其次效率将会是慢的惊人的。!!!
并且不能保证都是以100k来分割文件,只能保证不高与100k
所以建议还是用第三方软件好。
不知楼主意下如何?
技术问题请到论坛发帖求助!

TOP

"每个文件末尾追加一个半角句号", 追加的句号不是自然的句号?那也不太好呀。
很难吗?用c语言可以解决这个问题吗?

TOP

回复 10楼 的帖子

如果要实现你的想法,需要对文本的每个字符进行判断,不管用什么语言,速度都会慢的无法忍受。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

以下为儿子所写“分小说”软件的c代码,我一直在用“分小说”软件,还行,也就是还没有实现“以中文句号、英文句号或中英文问号结束”,所以求助。还有一点,是否有什么bug或者是否可以瘦身,或提高效率。请指教。
include "stdio.h"
main(){
  FILE *fp,*in,*ot;
  char name[40],jname[40],dosn[40],aa[40];
  int a,j;
  long i;
  system("dir /b | find \"txt\" > ql.yylogo");
  fp=fopen("ql.yylogo","rt");
  while(!feof(fp)){
    fscanf(fp,"%s",jname);
    strcpy(name,jname);
    j=strlen(name);
    for(a=0;a<j;a++)
      if(a>=j-4)
        name[a]='\0';
    in=fopen(jname,"rt");
    strcpy(dosn,"md ");
    strcat(dosn,name);
    system(dosn);
    a=1;
    while(!feof(in)){
      sprintf(aa,"%s\\%d.txt",name,a);
      ot=fopen(aa,"wt");
      for(i=1;i<=39999L;i++){
        if(feof(in))
          break;
        fputc(fgetc(in),ot);
      }
      fclose(ot);
      a++;
    }
  }
  fclose(fp);
  system("del ql.yylogo");
}

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (1 1 20) do set "bu=ZZZZZZZZZZ!bu!"
  3. set/p file=请把要处理的文件拖到此处:
  4. for /f "delims=" %%a in ("%file:"=%") do (
  5.    if not exist "%%~na" md "%%~na"
  6.    split  -b 99k "%file:"=%" "%%~na\%%~na_"
  7.    set "var=%%~na"
  8. )
  9. for /f "tokens=1* delims=_" %%a in ('dir/b/a-d "%var%"') do (
  10.    echo 。>>"%var%\%%a_%%b"
  11.    set "%%b=%%b!bu!"
  12.    set "paixu.!%%b:~0,200!=%%b"
  13. )
  14. for /f "tokens=2 delims==" %%a in ('set paixu.') do (
  15.    set /a n+=1
  16.    ren "%var%\%var%_%%a" "%var%_!n!.txt"
  17. )
  18. start "" "%var%"
复制代码

[ 本帖最后由 随风 于 2008-10-9 17:48 编辑 ]
技术问题请到论坛发帖求助!

TOP

13楼的代码测试不能通过,没有效果,提示:环境变量paixu,没有定义。

TOP

我测试可以啊???
技术问题请到论坛发帖求助!

TOP

返回列表