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

[文本处理] [已解决]批处理用for去掉目录及子目录下的文本的前2行

假设当前目录下有N个文件夹,每个文件夹里面有M层目录和上万个.log文件,我想将每个文本的前两行去掉,在原路径重新创建与原文件名一致再加.txt扩展名的文件。
我的代码如下,恳请赐教:
  1. @echo off
  2. for /f %%a in ('dir /s /b ') do (
  3.   for /f "skip=2" %%b in (%%a) do (
  4.     (echo %%b)>%%a.txt
  5.   )
  6. )
  7. pause
复制代码

可以在原路径输出文件,但每个文件只剩下一行文本,不知道错在哪里。


6楼asnahu兄的代码可以,另外,大家可以思考下,若不用more命令,能否完成呢?
另外,如果这些文件中有部分文件前N行有空行,应如何去掉这些空行呢?(注意是行不是列)


结贴了,感谢asnahu兄的支持。

[ 本帖最后由 gorwoo 于 2009-9-29 14:05 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

可以输出文件,证明思路应该可行,但是所新建的每个文件只剩下一行文本的第一列,实在不知道错在哪里。请高手指点!

[ 本帖最后由 gorwoo 于 2009-9-29 12:54 编辑 ]

TOP

请版主们赐教,谢谢!

[ 本帖最后由 gorwoo 于 2009-9-29 12:51 编辑 ]

TOP

行处理用SED更方便:
  1. @echo off
  2. for /f "delims=" %%a in ('dir /s/b *.log') do (
  3.     sed "1,2d;" "%%~a"|sed "s/$/\r/g">"%%~a.txt"
  4. )
  5. exit
复制代码
sed:http://www.vkill.net/tools/sed_4.1.5.rar

[ 本帖最后由 asnahu 于 2009-9-29 10:35 编辑 ]

TOP

请问楼上的,能用for直接完成吗?可以输出文件了,但每个文件只剩下一行文本,不知道错在哪里。
  1. @echo off
  2. for /f %%a in ('dir /s /b ') do (
  3. for /f "skip=2" %%b in (%%a) do (
  4. (echo %%b)>%%a.txt
  5. )
  6. )
  7. pause
复制代码

[ 本帖最后由 gorwoo 于 2009-9-29 12:48 编辑 ]

TOP

用FOR其实没那么复杂:
  1. @echo off
  2. for /f "delims=" %%a in ('dir /s/b *.log') do (
  3.     more +2 "%%~a">"%%~a.txt"
  4. )
  5. exit
复制代码
1

评分人数

TOP

asnahu兄,经测试,你的代码可以,不过在目录下会多创建一些以目录名为名的txt文件,大体上成功,more的用法不熟悉,能解析下么,谢谢。

TOP

asnahu兄的代码可以,若不用more命令,能否完成呢?
另外,如果这些文件中有部分文件前N行有空行,应如何去掉这些空行呢?(注意是行不是列)

结贴了,感谢asnahu兄的支持。

[ 本帖最后由 gorwoo 于 2009-9-29 14:05 编辑 ]

TOP

回复 8楼 的帖子

使用关键字空行搜索本论坛,能找到不少实例,你先自己试试?

Q: 如何使用论坛搜索功能来解决自己的问题?
A: 参考:批处理之家论坛使用常见问题FAQ
http://bbs.bathome.net/thread-3473-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. @echo off
  2. for /f "delims=" %%a in ('dir/s/b/a-d *.log') do (
  3.  cd.>"%%a.txt"
  4.  for /f "usebackq delims=" %%b in ("%%a") do (
  5.   set/a n+=1
  6.   set L=%%b
  7.   setlocal enabledelayedexpansion
  8.   if !n! gtr 2 (echo !L!)>>"%%a.txt"
  9.   endlocal
  10.  )
  11. )
复制代码
批处理之家论坛官方 QQ 群 :【当前人数/人数上限】【2009-07-08】
群①:43011867(181/200);群②:(暂缺数据);群③:66165582(120/200)。

TOP

回复 8楼 的帖子

不好意思来晚了,对于行的处理我想还是SED好用,只要一两行代码即可。在for命令中使用delims即可过滤空行,另外findstr查找非空内容也可以过滤空行,就执行效率来说用前一种更好。

TOP

返回列表