中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » (已解决)[求助]几千文件,位于不同目录,去掉前20行
作者:
标题: (已解决)[求助]几千文件,位于不同目录,去掉前20行 上一主题 | 下一主题
ebfok
初级用户





积分 87
发帖 33
注册 2006-6-20
来自 cs
状态 离线
『楼 主』:  (已解决)[求助]几千文件,位于不同目录,去掉前20行

文件内容如下:
LabVIEW Measurement       
Writer_Version        0.92
Reader_Version        1
Separator        Tab
Multi_Headings        Yes
X_Columns        One
Time_Pref        Absolute
Date        2007/04/29
Time        16:41:47.375
***End_of_Header***       
       
Channels        1       
Samples        10000       
Date        2007/04/29       
Time        16:41:47.375       
X_Dimension        Time       
X0        -1.0111999999999947E-6       
Delta_X        2.000000E-10       
***End_of_Header***               
X_Value        TDS3k(CH1)        Comment
3.260681E+9        0.000000E+0
3.260681E+9        6.000000E-3
3.260681E+9        1.000000E-2
3.260681E+9        1.200000E-2
3.260681E+9        1.400000E-2
3.260681E+9        1.600000E-2
3.260681E+9        1.600000E-2
..................              ..................
..................              ..................
..................              ..................

所有文件的扩展名为.lvm,位于不同的子目录,所有子目录位于同一个根目录下,文件总数有几千个
要求去掉前20行,只留下
3.260681E+9        0.000000E+0
3.260681E+9        6.000000E-3
3.260681E+9        1.000000E-2
3.260681E+9        1.200000E-2
3.260681E+9        1.400000E-2
3.260681E+9        1.600000E-2
3.260681E+9        1.600000E-2
..................              ..................
..................              ..................
..................              ..................

从而得到“干净”的几千个新文件
本人做的尝试:
鉴于要保留的行都有“+”,于是想到:
for /r %%i in (*.lvm) do find "+" %%i>%%i
发现每个文件被替换为类似

---------- xxx.LVM
的内容。
后来想到改为
for /r %%i in (*.lvm) do find "+" %%i>%%i.res
res表示结果"result",
但是有两个问题:
1.文件扩展名改了,不合要求;
2.每个文件的开头还是有

---------- xxx.LVM
请高手帮我解决这两个问题,先谢了!

[ Last edited by ebfok on 2007-5-10 at 04:17 PM ]

2007-5-10 12:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bhsx
初级用户





积分 43
发帖 21
注册 2007-5-1
状态 离线
『第 2 楼』:  

for /r %%i in (*.lvm) do call :skip %1

:skip
for /f "skip=20" %%i in (%1) do echo %%i >>%~n1%.res

不知道很不很......

[ Last edited by bhsx on 2007-5-10 at 03:37 PM ]

2007-5-10 13:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 3 楼』:  

findstr "+" *.lvm>new.lvm

2007-5-10 13:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 4 楼』:  

完整的代码,假设文件都在C盘
@echo off
for /f "delims=" %%i in ('dir /s /b /a-d c:\*.lvm') do (


findstr "+" "%%i" >%%i.lvm
)

2007-5-10 13:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ebfok
初级用户





积分 87
发帖 33
注册 2006-6-20
来自 cs
状态 离线
『第 5 楼』:  

首先感谢俩位鼎力相助!
其次发现:
1.  2楼代码无法运行,出现 “此时不应有in” 的错误;
2.  4楼的方案解决了我提出的第二个问题,但是第一个问题仍存在,即扩展名变为xxx.lvm.lvm,可能是我没表述清楚,我的意思是想让扩展名保持xxx.lvm不变。
期待更完美的解决办法,用vbs也行!

2007-5-10 13:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 6 楼』:  

@echo off
for /f "delims=" %%i in ('dir /s /b /a-d c:\*.lvm') do (
findstr "+" "%%i" >%%~ni1.lvm
)

pause

名字需要稍微变一变

[ Last edited by zhoushijay on 2007-5-10 at 02:23 PM ]

2007-5-10 14:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ebfok
初级用户





积分 87
发帖 33
注册 2006-6-20
来自 cs
状态 离线
『第 7 楼』:  

%%~ni1.lvm,受教了!问题解决了!!感谢zhoushijay兄!!!
另外通过我3个小时的艰苦奋斗,也用vbs实现了:
Const ForReading = 1, ForWriting = 2
Dim fso, f,fn
fn=0
Set fso = CreateObject("Scripting.FileSystemObject")
Sub cut (Files)
For Each File In Files
        Ext = fso.GetExtensionName(File)
        If Ext = Extname Then
                Set f = fso.OpenTextFile(File, ForReading, True)
                For i = 1 To 20
                        f.SkipLine
                Next
                fleft=f.ReadAll
                f.Close
                Set f = fso.OpenTextFile(File, ForWriting, True)
                f.Write fleft
                f.Close
                fn = fn + 1
        End If
Next
End Sub
dd = InputBox("请输入文件所在总目录的路径","FilesCutter")
If dd <> "" Then
Extname = InputBox("请输入要执行处理的文件的扩展名" & vbCrLf & "默认为lvm" & vbCrLf & "请不必输入点号!","FilesCutter","lvm")
StartTime = Timer
Set Folder = fso.GetFolder(dd)
Set Files= Folder.Files
cut Files
Set sf=Folder.SubFolders
For Each Folder In sf
Set Files = Folder.Files
cut Files
Next
EndTime = Timer
TimeIt = EndTime - StartTime
Msgbox "执行完毕!" & vbCrLf & "耗时:" & TimeIt & "秒" & vbCrLf & "处理文件总数:" & fn"
Else
MsgBox "您已经取消执行或者输入为空,程序将停止!请再次执行!"
End If

2007-5-10 16:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 8 楼』:  

我也来玩一把,没有测试。
for /r %%a in (*.lvm) do more +20 "%%a" >_%%~nxa


2007-5-10 17:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 9 楼』:  

for /r %%a in (*.lvm)
这样可以搜索子目录中的LVM文件吗

2007-5-10 17:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by zhoushijay at 2007-5-10 17:18:
for /r %%a in (*.lvm)
这样可以搜索子目录中的LVM文件吗



  Quote:
实践是检验真理的唯一标准



2007-5-10 17:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 11 楼』:  

不可以,程序崩溃了

2007-5-10 18:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: