标题: [文本处理] [已解决]批处理怎样让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
- @echo off
- for /f "delims=" %%f in ('dir /a:-d /b *.txt') do (
- set /p var=<"%%f"
- SetLocal EnableDelayedExpansion
- for /f "tokens=*" %%a in ("!var!") do (
- EndLocal
- echo,%%a
- more +1 "%%f"
- ) >.tmp
- move .tmp "%%f"
- )
复制代码
作者: darkangelz 时间: 2011-1-27 09:26
天啊。这么快。高手啊。谢谢
作者: darkangelz 时间: 2011-1-27 09:36
我保存为.bat,不能运行啊
作者: liion631818 时间: 2011-1-27 10:58
- @echo off
- setlocal enabledelayedexpansion
- for /r %%i in (*.txt) do (
- set "file=%%i"
- set /a count=1
- cd.>!file!.tmp
- for /f "delims=" %%j in (!file!) do (
- set "line=%%j"
- set "line_bak=!line!"
- echo !count!
- call :intercept
- if defined line (
- if !count! EQU 1 (
- echo !line! 2>nul>>!file!.tmp
- ) else (
- echo !line_bak! 2>nul>>!file!.tmp
- )
- )else (
- echo\>>!file!.tmp
- if !count! EQU 1 set /a count-=1
- )
- set /a count+=1
- )
- move /y !file!.tmp !file!
- )
- pause
- goto :eof
- :intercept
- 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楼的代码改了下,可以用了,他的更高效简洁,跟着学习了- @echo off
- for /f "delims=" %%f in ('dir /a-d /b *.txt') do (
- set "var=%%f"
- SetLocal EnableDelayedExpansion
- for /f "tokens=*" %%a in (!var!) do (
- set "line=%%a"
- echo !line!
- goto end
- ) >.tmp
- :end
- more +1 !var!>>.tmp
- move .tmp !var!
- )
- echo ok
- 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 楼的意思似乎是:提取标题
提取第一行文字,并去除左边的空格和制表符:- @echo off
- for /f "delims=" %%f in ('dir /a:-d /b *.txt') do (
- set /p var=<"%%f"
- SetLocal EnableDelayedExpansion
- for /f "eol= tokens=*" %%a in ("!var!") do (
- EndLocal
- echo,%%a
- )
- )
- pause
复制代码
[ 本帖最后由 tmplinshi 于 2011-1-27 22:20 编辑 ]
作者: Batcher 时间: 2011-1-28 12:43 标题: 回复 7楼 的帖子
请在顶楼详细描述一下你的问题,并上传附件让大家做测试。
作者: tmplinshi 时间: 2011-1-28 18:08 标题: 回复 1楼 的帖子
那个既不是空格也不是TAB。。论坛不能显示这个“空格”和TAB,请下载附件。
这个“空格”放在代码标签被显示成了:
复制代码
- @echo off
- for /f "delims=" %%f in ('dir /a:-d /b *.txt') do (
- set /p var=<"%%f"
- SetLocal EnableDelayedExpansion
- for /f "tokens=* delims= " %%a in ("!var!") do (
- EndLocal
- echo,%%a
- more +1 "%%f"
- ) >.tmp
- move .tmp "%%f"
- )
复制代码
[ 本帖最后由 tmplinshi 于 2011-1-28 18:57 编辑 ]
作者: darkangelz 时间: 2011-1-29 07:36
谢谢。已经完美解决了。真是太棒了。非常感谢
[ 本帖最后由 darkangelz 于 2011-1-29 14:58 编辑 ]
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |