Board logo

标题: (已解决)[求助]几千文件,位于不同目录,去掉前20行 [打印本页]

作者: ebfok     时间: 2007-5-10 12:38    标题: (已解决)[求助]几千文件,位于不同目录,去掉前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 ]
作者: bhsx     时间: 2007-5-10 13:06
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 ]
作者: zhoushijay     时间: 2007-5-10 13:08
findstr "+" *.lvm>new.lvm
作者: zhoushijay     时间: 2007-5-10 13:13
完整的代码,假设文件都在C盘
@echo off
for /f "delims=" %%i in ('dir /s /b /a-d c:\*.lvm') do (


findstr "+" "%%i" >%%i.lvm
)
作者: ebfok     时间: 2007-5-10 13:46
首先感谢俩位鼎力相助!
其次发现:
1.  2楼代码无法运行,出现 “此时不应有in” 的错误;
2.  4楼的方案解决了我提出的第二个问题,但是第一个问题仍存在,即扩展名变为xxx.lvm.lvm,可能是我没表述清楚,我的意思是想让扩展名保持xxx.lvm不变。
期待更完美的解决办法,用vbs也行!
作者: zhoushijay     时间: 2007-5-10 14:08
@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 ]
作者: ebfok     时间: 2007-5-10 16:15
%%~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
作者: lxmxn     时间: 2007-5-10 17:02
我也来玩一把,没有测试。
for /r %%a in (*.lvm) do more +20 "%%a" >_%%~nxa

作者: zhoushijay     时间: 2007-5-10 17:18
for /r %%a in (*.lvm)
这样可以搜索子目录中的LVM文件吗
作者: lxmxn     时间: 2007-5-10 17:43


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



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


作者: zhoushijay     时间: 2007-5-10 18:14
不可以,程序崩溃了