Board logo

标题: [文本处理] 批处理怎么实现按指定符号分割TXT文本呢? [打印本页]

作者: chuan31    时间: 2011-1-16 21:33     标题: 批处理怎么实现按指定符号分割TXT文本呢?

如题,就是当前目录下有一个TXT文本 我想把这个TXT文本按指定符号分割,比如按句号。分割后的文件单独存为独立的一个TXT于当前目录。请会的老大帮忙写个代码,最好是相对路劲的 就是不用指定要分割的文件的绝对路劲
作者: skuny    时间: 2011-1-16 21:44

一行中有很多句号?

你要前面还是后面?

你想怎么分割?
作者: chuan31    时间: 2011-1-16 21:58

假如这个TXT里面有20个句号 就分为20份 有多少句号就分为多少单独的文件
作者: hanyeguxing    时间: 2011-1-16 22:25

fr.exe:http://ishare.iask.sina.com.cn/f/7088512.html
  1. @echo off&setlocal enableDelayedExpansion
  2. for %%a in (*.txt) do set n=%%~na
  3. copy "%n%.txt" temp.h>nul
  4. fr.exe temp.h /ric:"。" /t:"。\r\n"
  5. for /f "delims=" %%a in (temp.h) do (
  6. set/a a+=1
  7. >"%n%_!a!.txt" echo %%a
  8. )
  9. del temp.h
复制代码

作者: yhcbird    时间: 2011-1-16 22:33

应该用纯批可以办到的吧。。先睡觉。。。。
作者: tmplinshi    时间: 2011-1-16 22:52

文本中不能含有 * 号
  1. @echo off
  2. set "文本=1.txt"
  3. set "分隔符=。"
  4. findstr /n .* "%文本%" >.tmp
  5. set n=1
  6. for /f "delims=" %%a in (.tmp) do (
  7.     set var=%%a
  8.     SetLocal EnableDelayedExpansion
  9.     set var=!var:*:=!
  10.     if "!var!" neq "" (
  11.         if "!var:%分隔符%=!" neq "!var!" (
  12.             set var=!var:?=?!
  13.             set var=!var:"=”!
  14.             for %%b in ("!var:%分隔符%=" "!") do (
  15.                 >.tmp echo !n!
  16.                 EndLocal
  17.                 set var=%%~b
  18.                 set /a n += 1
  19.                 set /p m=<.tmp
  20.                 SetLocal EnableDelayedExpansion
  21.                 set var=!var:?=?!
  22.                 >>"!文本:~0,-4!_!m!.txt" echo,!var:”="!
  23.             )
  24.         ) else >>"!文本:~0,-4!_!n!.txt" echo,!var!
  25.     ) else >>"!文本:~0,-4!_!n!.txt" echo,!var!
  26.     EndLocal
  27. )
  28. del .tmp
复制代码

[ 本帖最后由 tmplinshi 于 2011-1-16 23:00 编辑 ]
作者: chuan31    时间: 2011-1-19 12:53

原帖由 tmplinshi 于 2011-1-16 22:52 发表
文本中不能含有 * 号@echo off
set "文本=1.txt"
set "分隔符=。"

findstr /n .* "%文本%" >.tmp
set n=1
for /f "delims=" %%a in (.tmp) do (
    set var=%%a
    SetLocal EnableDelayedExpansion
    ...


经测试完全可用 不过有个小小的请求,能不能让输出的文本带有原来他自己的句号呢??现在输出的文本原来结尾的句号没有了。另外要处理的文件路径能做成相对路径吗?只要是当前文件夹下的文件全部处理,而不是指定文件名。

[ 本帖最后由 chuan31 于 2011-1-19 12:55 编辑 ]
作者: chuan31    时间: 2011-1-19 12:57

原帖由 hanyeguxing 于 2011-1-16 22:25 发表
fr.exe:http://ishare.iask.sina.com.cn/f/7088512.html@echo off&setlocal enableDelayedExpansion
for %%a in (*.txt) do set n=%%~na
copy "%n%.txt" temp.h>nul
fr.exe temp.h /ric:"。" /t:"。\r\n"
for / ...


版主 你的代码这次运行了生成一个文件 不过里面的内容还是没有分开,如果分开的话应该要生成很多独立的文件才对。期待老大修改下这个精悍的代码。
作者: tmplinshi    时间: 2011-1-19 13:38

  1. @echo off
  2. set "分隔符=。"
  3. for /f "delims=" %%a in ('dir /a:-d /b *.txt') do (
  4.     findstr /n .* "%%a" >.tmp
  5.     set fname=%%~na
  6.     set fext=%%~xa
  7.     set n=1
  8.     for /f "delims=" %%a in (.tmp) do (
  9.         set var=%%a
  10.         SetLocal EnableDelayedExpansion
  11.         set var=!var:*:=!
  12.         if "!var!" neq "" (
  13.             if "!var:%分隔符%=!" neq "!var!" (
  14.                 set var=!var:?=?!
  15.                 set var=!var:"=”!
  16.                 for %%b in ("!var:%分隔符%=%分隔符%" "!") do (
  17.                     if %%b neq "" (
  18.                         >.tmp echo !n!
  19.                         EndLocal
  20.                         set var=%%~b
  21.                         set /a n += 1
  22.                         set /p m=<.tmp
  23.                         SetLocal EnableDelayedExpansion
  24.                         set var=!var:?=?!
  25.                         >>"!fname!_!m!!fext!" echo,!var:”="!
  26.                     )
  27.                 )
  28.             ) else >>"!fname!_!n!!fext!" echo,!var!
  29.         ) else >>"!fname!_!n!!fext!" echo,!var!
  30.         EndLocal
  31.     )
  32. )
  33. del .tmp
复制代码





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