![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-26 02:08 |
共 47,812 主题排行 / 349,910 发帖 / 今日 0 篇 / 48,264 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [求助] 如何取得一个文件的指定行数的指定位置内容 |
| 可打印版本 4,428 / 20 |
| 第1楼 krell | 发表于 2006-10-03 13:58 |
| 初级用户 发帖 6 积分 116 | |
|
[求助] 如何取得一个文件的指定行数的指定位置内容 批处理如何取得一个文件的指定行数的指定位置内容,并写到另一个文件中。
比如一个文件的第5排的倒数12位字符,和第6排的倒数1-3位字符(该行内容中有一个=符号后可能是1-3位字符)。 得到这两个数值后,写入到另一个文件的指定行数中。(简单点输出到文件也可以,行数不多) 实在是不会任何编程,想想批处理应该最简单吧。可是,看了不少教程,没发现讲解如何得到一个文件中的指定内容的实现方法,请各位大大指点一下,谢谢! |
|
| 第2楼 namejm | 发表于 2006-10-03 21:24 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
初步写出了如下代码,楼主试一下看是否可行。另外,如果能把文件的内容贴一部分出来的话,就更好找一下规律,因为我不知道你所说的 “和第6排的倒数1-3位字符(该行内容中有一个=符号后可能是1-3位字符)。” ,要提取的内容究竟是倒数1~3的字符,还是倒数的1或2或3。
[ Last edited by namejm on 2006-10-3 at 21:51 ] |
|
| 第3楼 pengfei | 发表于 2006-10-03 21:28 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
namejm兄的代码简洁, 如果把文本行中存在空格就无法整行提取的情况考虑进去就更好了.
|
|
| 第4楼 namejm | 发表于 2006-10-03 21:33 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
Originally posted by pengfei at 2006-10-3 21:28: 呵呵,其实已经能够提取行中可能存在的空格的。 for语句中,提取存在空格的行,除了用 "tokens=*" 之外,"delims=" 也是一个不错的选择,头两天在群里讨论过的,pengfei 可能没注意到。 |
|
| 第5楼 pengfei | 发表于 2006-10-03 21:42 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
呵呵~ 的确如此, 看来整行提取有三种方法了:
tokens=* delims=* delims= 不过我还是发现兄弟的代码for中少了一个/F参数. ^_^ |
|
| 第6楼 namejm | 发表于 2006-10-03 21:50 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
谢谢你的提醒,确实是少了一个 /F 参数,以前写代码的时候都测试过了才发出来的,这次这个因为觉得简单就没测试了,想不到竟然出现了这个低级错误,已经改正^_^
到目前为止,提取整行的方法我只发现了两种,而你所说的 delims=* 是难以提取的,因为它的含义只是提取以 * 分隔的内容而已。当内容中不含 * 的时候,它也会提取含有空格的行,但是,如果内容中有 * 的时候,情况就大不一样了,你测试一下就可以发现了。 |
|
| 第7楼 pengfei | 发表于 2006-10-04 05:06 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
Originally posted by namejm at 2006-10-3 21:50: 看来这是我的一个习惯性错误了. "tokens=*" 将文本行内容都赋给第一个可替换变量 "delims=" 不使用任何分隔符, 作用是取消了默认空格作为分隔符. 使文本行中的内容都赋给一个可替换变量. "delims=*" 而这个是使用特殊分隔符, 来替代空格. 显然不行的, 像兄说的这样, 呵呵~ 一旦出现该字符将不能正常提取. |
|
| 第8楼 krell | 发表于 2006-10-04 12:59 |
| 初级用户 发帖 6 积分 116 | |
|
谢谢两位热心的大侠。不过试了一下,好像不行。
需要得到数值的文件内容如下: [Program ] Name = NEW ERY Source=FAC [FAC] ImageFileName=90B5A901.ACR ImageFileNumber=34 [Burn] ImageFileNumber=0 Description= [Action] DoRecovery=No 需要的数值是 90B5A901.ACR 和 34 (这个34有可能是1位的数据,也有可能是两位的数据,也有可能是3位的数据)。 得到这两个数据后写到一个新文件中。 Image_Name=这里写90B5A901.ACR,Image_Count=这里写34。 新文件内容如下: [Program ] Name = NEW ERY Source=FD_INFO [FD_INFO] Image_Name= Image_Count= Image_Size=51200 Image_PerDisc=13 Image_Language=1033 想象中这个操作应该很简单的吧,不是想不劳而获,而是实在太菜,希望大侠再给点意见,谢谢! |
|
| 第9楼 pengfei | 发表于 2006-10-05 00:23 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
请楼主测试效果:
|
|
| 第10楼 namejm | 发表于 2006-10-05 00:36 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
set /a num+=1 一句可以省略,在for中用 skip=4 直接跳过头4行的内容就可以从第五行内容开始读取了。或者用 more +4 1.ini 也可以达到同样的效果。
|
|
| 第11楼 pengfei | 发表于 2006-10-05 01:45 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
我使用计数的方式提取数据是因为ImageFileNumber这一句出现了两次.
|
|
| 第12楼 krell | 发表于 2006-10-05 04:12 |
| 初级用户 发帖 6 积分 116 | |
|
呵呵,还是不行呀。
生成的新文件并未得到取值,还是这样的啦!大侠可以试试。 Image_Name= Image_Count= |
|
| 第13楼 pengfei | 发表于 2006-10-05 05:02 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
需要得到数值的文件默认为当前目录下的1.ini
|
|
| 第14楼 krell | 发表于 2006-10-05 05:45 |
| 初级用户 发帖 6 积分 116 | |
|
就算是再菜也知道文件名和路径的。
不过,测试一下真的没有得到想要的结果。 附件当中的文件,楼上的大侠自己试一下了! 附件 1.rar (598 bytes) |
|
| 第15楼 pengfei | 发表于 2006-10-05 08:08 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
哈哈~ 看来又发现一个新大陆, 楼主的1.ini文件为unicode编码.
这种编码格式的文本行for是无法提取的, 我把1.ini改为ANSI码. 请测试... 附件 test.rar (546 bytes) |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |