|
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文件吗 |
|
|
|
2007-5-10 17:43 |
|
|
zhoushijay
高级用户
Autowalk
积分 845
发帖 375
注册 2007-3-3
状态 离线
|
|
2007-5-10 18:14 |
|