Board logo

标题: [文本处理] [已解决]批处理怎样让txt文件标题都在最左边? [打印本页]

作者: darkangelz    时间: 2011-1-27 07:15     标题: [已解决]批处理怎样让txt文件标题都在最左边?

求一批处理程序:我的文件夹中有诺干txt文件。我要把这些文件的第一行左边的空格全去掉。让标题在最左边。文件中的第一行标题有的在最左边,有的在中间。我要把在中间的都改成在最左边,谢谢

  我传个附件解释一下。附件中有文件类型1和文件类型2. 1是正常的。2的标题很长,前面有空格,我想因为文章正文的标题在中间的原因,我用 a.bat程序提取文章正文第一行作为TXT文件的标题。提取出来就是这样子。现在我要把类型2都变成类型1 就好了。yyy.bat是11楼给的。标题还是没改啊。不知道我说的是不是清楚,请高手帮下忙。
作者: tmplinshi    时间: 2011-1-27 07:44

  1. @echo off
  2. for /f "delims=" %%f in ('dir /a:-d /b *.txt') do (
  3.     set /p var=<"%%f"
  4.     SetLocal EnableDelayedExpansion
  5.     for /f "tokens=*" %%a in ("!var!") do (
  6.         EndLocal
  7.         echo,%%a
  8.         more +1 "%%f"
  9.     ) >.tmp
  10.     move .tmp "%%f"
  11. )
复制代码

作者: darkangelz    时间: 2011-1-27 09:26

天啊。这么快。高手啊。谢谢
作者: darkangelz    时间: 2011-1-27 09:36

我保存为.bat,不能运行啊
作者: liion631818    时间: 2011-1-27 10:58

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /r %%i in (*.txt) do (
  4. set "file=%%i"
  5. set /a count=1
  6. cd.>!file!.tmp
  7. for /f "delims=" %%j in (!file!) do (
  8. set "line=%%j"
  9. set "line_bak=!line!"
  10. echo !count!
  11. call :intercept
  12. if defined line (
  13. if !count! EQU 1 (
  14. echo !line! 2>nul>>!file!.tmp
  15. ) else (
  16. echo !line_bak! 2>nul>>!file!.tmp
  17. )
  18. )else (
  19. echo\>>!file!.tmp
  20. if !count! EQU 1 set /a count-=1
  21. )
  22. set /a count+=1
  23. )
  24. move /y !file!.tmp !file!
  25. )
  26. pause
  27. goto :eof
  28. :intercept
  29. if "!line:~0,1!"==" " set "line=!line:~1!"&goto intercept
复制代码
代码效果:
1、保存了标题所在行之前的空白行
2、文本中的特殊字符不能处理
作者: liion631818    时间: 2011-1-27 11:17

原帖由 darkangelz 于 2011-1-27 09:36 发表
我保存为.bat,不能运行啊

将2楼的代码改了下,可以用了,他的更高效简洁,跟着学习了
  1. @echo off
  2. for /f "delims=" %%f in ('dir /a-d /b *.txt') do (
  3.         set "var=%%f"
  4.         SetLocal EnableDelayedExpansion
  5.         for /f "tokens=*" %%a in (!var!) do (
  6.                 set "line=%%a"
  7.                 echo !line!        
  8.                 goto end
  9.         ) >.tmp
  10. :end
  11.         more +1 !var!>>.tmp
  12.         move .tmp !var!
  13. )        
  14. echo ok
  15. pause
复制代码
希望你说的左边全是空格,没有包含制表符,这种情况没有 处理

[ 本帖最后由 liion631818 于 2011-1-27 11:20 编辑 ]
作者: darkangelz    时间: 2011-1-27 12:19

不行啊。可能我没说清楚。仔细解释一下:我的文件夹里有很多txt文件。这些文件的标题有的排在第一行的最左边。有的在中间。我运行了一个批处理文件。统一提取第一行作为标题。大部分都正常。可有一部分标题提取出来后非常的长,前面都是空格。我发现这些文件标题都是在原TXT文件第一行中间的。我想是不是标题在文章中间,提取出来的标题会连前面的空白一起被提取出来作为新标题。所以我要去掉这些标题前面的空白,好运行第一个批处理程序,让标题正常显示出来。谢谢
作者: liion631818    时间: 2011-1-27 12:57

你好好看下,是不是那个空白是制表符,如果不是空格上面的代码没法处理,前面已经说过了
至于你说标题在中间,如果前面全是空格,也是可以转换的
作者: darkangelz    时间: 2011-1-27 13:26

不是。我手动改了几个。把标题前面的空格删除,在提取就正常了。
作者: liion631818    时间: 2011-1-27 13:58

你把那些没正确处理的文件,用附件发出来吧
作者: tmplinshi    时间: 2011-1-27 22:12

你 1 楼的意思是:修改文件——去除第一行左边的空格
7 楼的意思似乎是:提取标题

提取第一行文字,并去除左边的空格和制表符:
  1. @echo off
  2. for /f "delims=" %%f in ('dir /a:-d /b *.txt') do (
  3.     set /p var=<"%%f"
  4.     SetLocal EnableDelayedExpansion
  5.     for /f "eol= tokens=*" %%a in ("!var!") do (
  6.         EndLocal
  7.         echo,%%a
  8.     )
  9. )
  10. pause
复制代码

[ 本帖最后由 tmplinshi 于 2011-1-27 22:20 编辑 ]
作者: Batcher    时间: 2011-1-28 12:43     标题: 回复 7楼 的帖子

请在顶楼详细描述一下你的问题,并上传附件让大家做测试。
作者: tmplinshi    时间: 2011-1-28 18:08     标题: 回复 1楼 的帖子

那个既不是空格也不是TAB。。论坛不能显示这个“空格”和TAB,请下载附件。

这个“空格”放在代码标签被显示成了:
复制代码
  1. @echo off
  2. for /f "delims=" %%f in ('dir /a:-d /b *.txt') do (
  3.     set /p var=<"%%f"
  4.     SetLocal EnableDelayedExpansion
  5.     for /f "tokens=* delims=         " %%a in ("!var!") do (
  6.         EndLocal
  7.         echo,%%a
  8.         more +1 "%%f"
  9.     ) >.tmp
  10.     move .tmp "%%f"
  11. )
复制代码

[ 本帖最后由 tmplinshi 于 2011-1-28 18:57 编辑 ]
作者: darkangelz    时间: 2011-1-29 07:36

谢谢。已经完美解决了。真是太棒了。非常感谢

[ 本帖最后由 darkangelz 于 2011-1-29 14:58 编辑 ]




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