中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-10 23:53
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » [已结]文本中按行提取特定字符开头的字符串的问题。
可打印版本  2,348 / 21
第1楼 nanhezzb 发表于 2008-12-14 16:54
初级用户 发帖 32 积分 37
[已结]文本中按行提取特定字符开头的字符串的问题。
test.txt内容如下:




测试文本大致为此种格式:
1每行有N段字符串,都使用“ - ”来分隔
2.路径的信息可能是其他后缀名的文件,文件路径可能含有“-”。
3.用“-”作为分隔符,含有路径的字符串是不确定在第几段的位置。
4.路径的有盘符为不确定是C,有可能是D\E\F…….

我想通过批处理,逐行分析提取从盘符开始直到扩展名结束的字符串(测试文本的红色部分),也就是不管什么方法提取每行中的文件的路径信息,因为其他段都是一些文件的属性参数和路径无关

小弟的水平,是在是想不出来一个完美点的批处理。

———————————————————————
感谢2楼的朋友,再次更新了问题!谢谢大家的回复和帮助!!
———————————————————————


[ Last edited by HAT on 2008-12-15 at 18:12 ]
第2楼 tireless 发表于 2008-12-14 17:36
银牌会员 发帖 1,122 积分 2,025
第3楼 tireless 发表于 2008-12-14 18:12
银牌会员 发帖 1,122 积分 2,025
re 4 楼
第4楼 HAT 发表于 2008-12-15 10:54
版主 发帖 5,017 积分 9,023
撇开批处理不谈,你是如何用人工提取路径信息的呢?你把规律总结出来,自然有人告诉你如何写代码。
第5楼 nanhezzb 发表于 2008-12-15 12:06
初级用户 发帖 32 积分 37
Originally posted by HAT at 2008-12-15 10:54 AM:
撇开批处理不谈,你是如何用人工提取路径信息的呢?你把规律总结出来,自然有人告诉你如何写代码。


人工的话,每行中从盘符(C、D或者其他)开始直到文件扩展名(.sys、.dll)结束。也就是文件的全路径,比如C:\WINDOWS\system32\drivers\XXXX.sys或者C:\WINDOWS\system32\XXXX.dll
想通过批处理,逐行分析提取从盘符开始直到扩展名结束的字符串(测试文本的红色部分),也就是不管什么方法提取每行中的文件的路径信息,因为其他段都是一些文件的属性参数和路径无关。

[ Last edited by nanhezzb on 2008-12-15 at 12:12 ]
第6楼 nafan 发表于 2008-12-15 13:21
初级用户 发帖 21 积分 22
没有来得及细想,是否可以按照这个思路呢:
先按照" - "分隔符号把文本分成一个一个字段
然后提取包含:\的字段。
第7楼 nafan 发表于 2008-12-15 13:25
初级用户 发帖 21 积分 22
建议用awk 或者grep
第8楼 slore 发表于 2008-12-15 13:32
铂金会员 发帖 2,478 积分 5,212
空格-空格替换为某字符……

然后分割……

文件路径带" - "的话会出问题,不过个人认为大部分都不会除了歌曲那些东西
第9楼 a794685135 发表于 2008-12-15 13:43
初级用户 发帖 34 积分 71
按照8楼的思路写了个
第10楼 slore 发表于 2008-12-15 14:00
铂金会员 发帖 2,478 积分 5,212
。。。少说了点……

先:分割……

前半部分set取最后一个字符得到Driver

后部分再按8楼走……
后面也可以一个个取。。。自己匹配吧
第11楼 nanhezzb 发表于 2008-12-15 14:32
初级用户 发帖 32 积分 37
Originally posted by a794685135 at 2008-12-15 01:43 PM:
按照8楼的思路写了个
第12楼 tireless 发表于 2008-12-15 14:44
银牌会员 发帖 1,122 积分 2,025
第13楼 nanhezzb 发表于 2008-12-15 14:59
初级用户 发帖 32 积分 37
Originally posted by tireless at 2008-12-15 02:44 PM:
@echo off & setlocal EnableDelayedExpansion
for /f "delims=" %%a in (test.txt) do (
set str=%%a
for /f "delims=" %%i in ("!str:*:=!") do set L=!str:%%i=!
for /f "delims=- " %%i in ("!str:*:=!") do echo !L:~-2!%%i
)
pause



这种先取:后面的段,然后添加前面的盘符。相比之下,对路径里面或者是其他段的空格或者是-的准确度比较高呢?

高手能不能讲下set的参数以及表达式意思

[ Last edited by nanhezzb on 2008-12-15 at 15:41 ]
第14楼 HAT 发表于 2008-12-15 15:02
版主 发帖 5,017 积分 9,023
Re 13楼
先看帮助,后提问。
set /?
环境变量替换已如下增强:

%PATH:str1=str2%

会扩展 PATH 环境变量,用 "str2" 代替扩展结果中的每个 "str1"。
要有效地从扩展结果中删除所有的 "str1","str2" 可以是空的。
"str1" 可以以星号打头;在这种情况下,"str1" 会从扩展结果的
开始到 str1 剩余部分第一次出现的地方,都一直保持相配。
第15楼 nanhezzb 发表于 2008-12-15 15:10
初级用户 发帖 32 积分 37
Originally posted by HAT at 2008-12-15 03:02 PM:
先看帮助,后提问。
set /?
环境变量替换已如下增强:

%PATH:str1=str2%

会扩展 PATH 环境变量,用 "str2" 代替扩展结果中 ...

帮助里面讲的太专业了,有些根本不理解,也没什么实际的例子。
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023