中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-04 13:10
48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » (已解决)[求助]几千文件,位于不同目录,去掉前20行
可打印版本  743 / 10
第1楼 ebfok 发表于 2007-05-10 12:38
初级用户 发帖 33 积分 87 来自 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 ]
第2楼 bhsx 发表于 2007-05-10 13:06
初级用户 发帖 21 积分 43
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 ]
第3楼 zhoushijay 发表于 2007-05-10 13:08
高级用户 发帖 375 积分 845
findstr "+" *.lvm>new.lvm
第4楼 zhoushijay 发表于 2007-05-10 13:13
高级用户 发帖 375 积分 845
完整的代码,假设文件都在C盘
@echo off
for /f "delims=" %%i in ('dir /s /b /a-d c:\*.lvm') do (


findstr "+" "%%i" >%%i.lvm
)
第5楼 ebfok 发表于 2007-05-10 13:46
初级用户 发帖 33 积分 87 来自 cs
首先感谢俩位鼎力相助!
其次发现:
1. 2楼代码无法运行,出现 “此时不应有in” 的错误;
2. 4楼的方案解决了我提出的第二个问题,但是第一个问题仍存在,即扩展名变为xxx.lvm.lvm,可能是我没表述清楚,我的意思是想让扩展名保持xxx.lvm不变。
期待更完美的解决办法,用vbs也行!
第6楼 zhoushijay 发表于 2007-05-10 14:08
高级用户 发帖 375 积分 845
@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 ]
第7楼 ebfok 发表于 2007-05-10 16:15
初级用户 发帖 33 积分 87 来自 cs
%%~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
第8楼 lxmxn 发表于 2007-05-10 17:02
版主 发帖 4,938 积分 11,386
我也来玩一把,没有测试。
第9楼 zhoushijay 发表于 2007-05-10 17:18
高级用户 发帖 375 积分 845
for /r %%a in (*.lvm)
这样可以搜索子目录中的LVM文件吗
第10楼 lxmxn 发表于 2007-05-10 17:43
版主 发帖 4,938 积分 11,386
Originally posted by zhoushijay at 2007-5-10 17:18:
for /r %%a in (*.lvm)
这样可以搜索子目录中的LVM文件吗

实践是检验真理的唯一标准
第11楼 zhoushijay 发表于 2007-05-10 18:14
高级用户 发帖 375 积分 845
不可以,程序崩溃了
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023