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