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

[文本处理] 求一个文本分割的批处理

有如下的一个1.txt文本


[2009-9-21 16:14:12]
在建立与服务器的连接时出错用( ...请教:如何。服务器的连接
[2009-9-21 16:39:17]
是变t 命令数的高效另类应用( ...请教:如何利用(服务器的连接如何利用(服
[2009-9-21 16:14:21]
在建立与服务器的连接时出错用( ...请教:如何。服务器的连接
[2009-9-21 16:39:32]
是变t 命令数的高效另类应用( ...请教:如何利用(命令数的高效另类应用( ...请教


现在希望能根据时间为标专把这个文本分成四个文本,就是第一个文本中内容是:
在建立与
服务器的连接时出错用请教:如何。服务器的连接

这样的形式,如果这个文本的名能用新文本的第一行作文件名那最好不过了.

摆脱能不能稍微专业点,文件名不能含有冒号的。你的条件达不到,考虑将冒号换成-可以。然后要注意的是楼主的样本文本里形如“[日期时间]”的行最后一字符是空格,不知是楼主疏漏还是本身那样的。我觉得是复制文本的时候的疏漏。假设最后一个字符是],而不是空格,代码如下:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (1.txt) do (
  3.      set "str=%%a"&set "str=!str::=-!"
  4.      if "!str:~0,1!"=="[" (if "!str:~-1!"=="]" echo %%a>!str!.txt&echo !str!>temp.txt) else (
  5.      set /p n=<temp.txt
  6.      echo %%a>>!n!.txt
  7. ))
  8. del /q temp.txt
  9. pause
复制代码
Still with wax

TOP

没有成功啊

出现了找不到temp文件的提示

TOP

回复 3楼 的帖子

你讲代码复制到文本所在的文件夹下运行肯定没问题的,我自己测试过
Still with wax

TOP

难道我哪点还没有做对?怎么不成功呢?

我这还是有些不行啊,代码有些不懂,自己也不好改

TOP

回复 5楼 的帖子

我代码前面有一段内容你就没认真看。你的错误结果是因为你自己粗心。我的代码适用于文本中中括号行最后一个字符不是空格,而是]的情况,这样看来楼主的原始文本应该是空格。那么稍微修改下代码就可以,如下,楼主不要总是衣来伸手,人家给的代码不要拿来就用,起码看完前提。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (1.txt) do (
  3.      set "str=%%a"&set "str=!str::=-!"
  4.      if "!str:~0,1!"=="[" (if "!str:~-1!"==" " echo %%a>!str!.txt&echo !str!>temp.txt) else (
  5.      set /p n=<temp.txt
  6.      echo %%a>>!n!.txt
  7. ))
  8. del /q temp.txt
  9. pause
复制代码
楼主自己对比下看两个代码有什么差别吧。
Still with wax

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('type "1.txt"') do (
  3.      if "%%i" lss "a" (set flag=i&set name=) else (
  4.         if defined flag (
  5.            if defined name (>>!name!.txt echo %%i) else (
  6.            >%%i.txt echo %%i
  7.            set name=%%i
  8.           )
  9.         )
  10.       )
  11.     )
  12. pause
复制代码

TOP

回复 7楼 的帖子

terse兄的代码不能满足楼主要求喔。
Still with wax

TOP

回复 8楼 的帖子

Lumiere兄,看来是没有看楼主的附件。楼主的意思就是7楼terse兄的代码。
(*^_^*)

TOP

  请楼主节约论坛资源,对图片尽可能地压缩,压缩教程请看这个帖子:http://bbs.bathome.net/thread-4673-1-1.html。已经把5楼的图片压缩后重新上传。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

很久没写代码了,看下行不行

  1. @echo off
  2. for /f "delims=" %%t in ('type 1.txt')do (
  3.  call :PD "%%t"
  4.  setlocal enabledelayedexpansion
  5.  for /f "tokens=1*" %%i in ("!FN!.txt "%%t"")do (
  6.  endlocal
  7.   if defined FN >>%%i echo+%%t
  8.  )
  9. )
  10. goto :eof
  11. :PD
  12.  set "s=%~1"
  13.  if not defined s (set FN=&goto :eof)
  14.  if "%s:~,1%%s:~-2,1%"=="[]" (set FN=)else (
  15.   if not defined FN set FN=%~1
  16.  )
复制代码
批处理之家论坛官方 QQ 群 :【当前人数/人数上限】【2009-07-08】
群①:43011867(181/200);群②:(暂缺数据);群③:66165582(120/200)。

TOP

回复 9楼 的帖子

不是吧,我看过他图片,但是没怎么看懂。我只是根据他顶楼的描述理解的。我自己测试过没有问题。但是用terse兄的代码测试似乎是以非中括号行作为文本文件名的。
Still with wax

TOP

回复 12楼 的帖子

楼主的意思,不要把“【日期时间】”写到文件中,以【日期时间】下一行作为为文件名。
(*^_^*)

TOP

回复 13楼 的帖子

不是的,你们看到的事修改后的帖子,我敢肯定我看到的楼主的意思就是时间也写入。他的帖子出来的时候我刚好在线。写不写是小事,关键是文件名的命名。
Still with wax

TOP

高手们快要成功了,

我试了一下11楼的快要成功了,不过就只生成了四个文件,只分割出来了三个,7楼的把文件名都分割出来了,但是文本文件中没有具体的内容,有没有结合了这两个的呢,对于时间加不加上在前面都行的,

TOP

返回列表