![Board logo](images/default/logo.gif)
标题: [文本处理] [已解决]批处理用for去掉目录及子目录下的文本的前2行 [打印本页]
作者: gorwoo 时间: 2009-9-29 09:11 标题: [已解决]批处理用for去掉目录及子目录下的文本的前2行
假设当前目录下有N个文件夹,每个文件夹里面有M层目录和上万个.log文件,我想将每个文本的前两行去掉,在原路径重新创建与原文件名一致再加.txt扩展名的文件。
我的代码如下,恳请赐教:
- @echo off
- for /f %%a in ('dir /s /b ') do (
- for /f "skip=2" %%b in (%%a) do (
- (echo %%b)>%%a.txt
- )
- )
- pause
复制代码
可以在原路径输出文件,但每个文件只剩下一行文本,不知道错在哪里。
6楼asnahu兄的代码可以,另外,大家可以思考下,若不用more命令,能否完成呢?
另外,如果这些文件中有部分文件前N行有空行,应如何去掉这些空行呢?(注意是行不是列)
结贴了,感谢asnahu兄的支持。
[ 本帖最后由 gorwoo 于 2009-9-29 14:05 编辑 ]
作者: gorwoo 时间: 2009-9-29 09:35
可以输出文件,证明思路应该可行,但是所新建的每个文件只剩下一行文本的第一列,实在不知道错在哪里。请高手指点!
[ 本帖最后由 gorwoo 于 2009-9-29 12:54 编辑 ]
作者: gorwoo 时间: 2009-9-29 10:21
请版主们赐教,谢谢!
[ 本帖最后由 gorwoo 于 2009-9-29 12:51 编辑 ]
作者: asnahu 时间: 2009-9-29 10:32
行处理用SED更方便:- @echo off
- for /f "delims=" %%a in ('dir /s/b *.log') do (
- sed "1,2d;" "%%~a"|sed "s/$/\r/g">"%%~a.txt"
- )
- exit
复制代码
sed:http://www.vkill.net/tools/sed_4.1.5.rar
[ 本帖最后由 asnahu 于 2009-9-29 10:35 编辑 ]
作者: gorwoo 时间: 2009-9-29 10:41
请问楼上的,能用for直接完成吗?可以输出文件了,但每个文件只剩下一行文本,不知道错在哪里。
- @echo off
- for /f %%a in ('dir /s /b ') do (
- for /f "skip=2" %%b in (%%a) do (
- (echo %%b)>%%a.txt
- )
- )
- pause
复制代码
[ 本帖最后由 gorwoo 于 2009-9-29 12:48 编辑 ]
作者: asnahu 时间: 2009-9-29 10:52
用FOR其实没那么复杂:- @echo off
- for /f "delims=" %%a in ('dir /s/b *.log') do (
- more +2 "%%~a">"%%~a.txt"
- )
- exit
复制代码
作者: gorwoo 时间: 2009-9-29 11:05
asnahu兄,经测试,你的代码可以,不过在目录下会多创建一些以目录名为名的txt文件,大体上成功,more的用法不熟悉,能解析下么,谢谢。
作者: gorwoo 时间: 2009-9-29 11:10
asnahu兄的代码可以,若不用more命令,能否完成呢?
另外,如果这些文件中有部分文件前N行有空行,应如何去掉这些空行呢?(注意是行不是列)
结贴了,感谢asnahu兄的支持。
[ 本帖最后由 gorwoo 于 2009-9-29 14:05 编辑 ]
作者: Batcher 时间: 2009-9-29 14:30 标题: 回复 8楼 的帖子
使用关键字空行搜索本论坛,能找到不少实例,你先自己试试?
Q: 如何使用论坛搜索功能来解决自己的问题?
A: 参考:批处理之家论坛使用常见问题FAQ
http://bbs.bathome.net/thread-3473-1-1.html
作者: wxcute 时间: 2009-9-29 14:31
- @echo off
- for /f "delims=" %%a in ('dir/s/b/a-d *.log') do (
- cd.>"%%a.txt"
- for /f "usebackq delims=" %%b in ("%%a") do (
- set/a n+=1
- set L=%%b
- setlocal enabledelayedexpansion
- if !n! gtr 2 (echo !L!)>>"%%a.txt"
- endlocal
- )
- )
复制代码
作者: asnahu 时间: 2009-9-29 18:19 标题: 回复 8楼 的帖子
不好意思来晚了,对于行的处理我想还是SED好用,只要一两行代码即可。在for命令中使用delims即可过滤空行,另外findstr查找非空内容也可以过滤空行,就执行效率来说用前一种更好。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |