| 
 
nanhezzb 
初级用户
 
  
 
  
  
积分 37 
发帖 32 
注册 2008-8-21 
状态 离线
 | 
『楼 主』:
 [已结]文本中按行提取特定字符开头的字符串的问题。
 
使用 LLM 解释/回答一下
  
test.txt内容如下: 
O41 - mfetdik - Anti-Virus Mini-Firewall Driver - c:\WINDOWS\system32\drivers\mfetdik.sys - (running) - Anti-Virus Mini-Firewall Driver - McAfee, Inc. - 64a3b2b683316b31b30c4622008810af 
O41 - 1394hub - Generic - Host - Process for Win32 Services - C:\WINDOWS\system32\svchostdy.SYS - (running) - Generic Host Process for Win32 Services - Microsoft Corporation - a22d7b3594c381efb3395a072725fe95 
O40 - svchost.exe - Microsoft Corporation - C:\WINDOWS\WinSxS\x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.2600.3352_x-ww_81af8e88\gdiplus.dll - Microsoft GDI+ - e08307c7e813517470d1f9d705a7d5b2 
测试文本大致为此种格式: 
1每行有N段字符串,都使用“ - ”来分隔 
2.路径的信息可能是其他后缀名的文件,文件路径可能含有“-”。 
3.用“-”作为分隔符,含有路径的字符串是不确定在第几段的位置。 
4.路径的有盘符为不确定是C,有可能是D\E\F…….
       我想通过批处理,逐行分析提取从盘符开始直到扩展名结束的字符串(测试文本的红色部分),也就是不管什么方法提取每行中的文件的路径信息,因为其他段都是一些文件的属性参数和路径无关。
 
小弟的水平,是在是想不出来一个完美点的批处理。
  
——————————————————————— 
感谢2楼的朋友,再次更新了问题!谢谢大家的回复和帮助!! 
——————————————————————— 
 Last edited by HAT on 2008-12-15 at 18:12 ]  
 
    
 
  
 |   
 | 
  2008-12-14 16:54 | 
  
 | 
 | 
 
tireless 
银牌会员
 
     
 
  
  
积分 2025 
发帖 1122 
注册 2007-9-5 
状态 离线
 | 
『第 2 楼』:
 
 
使用 LLM 解释/回答一下
  
@echo off & setlocal EnableDelayedExpansion 
for /f %%a in (test.txt) do ( 
  set str=%%a 
  for /f "delims=-" %%i in ("!str:*-xx=!") do echo xx%%i 
) 
pause
  
 
    
 
 
 
  
 |   
 | 
  2008-12-14 17:36 | 
  
 | 
 | 
 
tireless 
银牌会员
 
     
 
  
  
积分 2025 
发帖 1122 
注册 2007-9-5 
状态 离线
 | 
『第 3 楼』:
 re 4 楼
 
使用 LLM 解释/回答一下
  
@echo off & setlocal EnableDelayedExpansion 
for /f "delims=" %%a in (test.txt) do ( 
  set str=%%a 
  for /f "delims=- " %%i in ("!str:*C:=!") do echo C:%%i 
) 
pause
  
 
    
 
 
 
  
 |   
 | 
  2008-12-14 18:12 | 
  
 | 
 | 
 
HAT 
版主
 
        
 
  
  
积分 9023 
发帖 5017 
注册 2007-5-31 
状态 离线
 | 
『第 4 楼』:
 
 
使用 LLM 解释/回答一下
  
撇开批处理不谈,你是如何用人工提取路径信息的呢?你把规律总结出来,自然有人告诉你如何写代码。 
 
    
 
  
  |  
                  
  
                      |   
 | 
  2008-12-15 10:54 | 
  
 | 
 | 
 
nanhezzb 
初级用户
 
  
 
  
  
积分 37 
发帖 32 
注册 2008-8-21 
状态 离线
 | 
『第 5 楼』:
 
 
使用 LLM 解释/回答一下
  
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 ]  
 
    
 
  
 |   
 | 
  2008-12-15 12:06 | 
  
 | 
 | 
 
nafan 
初级用户
 
  
 
  
  
积分 22 
发帖 21 
注册 2008-11-13 
状态 离线
 | 
『第 6 楼』:
 
 
使用 LLM 解释/回答一下
  
没有来得及细想,是否可以按照这个思路呢: 
先按照" - "分隔符号把文本分成一个一个字段 
然后提取包含:\的字段。 
 
    
 
  
 |   
 | 
  2008-12-15 13:21 | 
  
 | 
 | 
 
nafan 
初级用户
 
  
 
  
  
积分 22 
发帖 21 
注册 2008-11-13 
状态 离线
 | 
 | 
  2008-12-15 13:25 | 
  
 | 
 | 
 
slore 
铂金会员
 
       
 
  
  
积分 5212 
发帖 2478 
注册 2007-2-8 
状态 离线
 | 
『第 8 楼』:
 
 
使用 LLM 解释/回答一下
  
空格-空格替换为某字符…… 
 
然后分割…… 
 
文件路径带" - "的话会出问题,不过个人认为大部分都不会除了歌曲那些东西 
 
    
 
  
  |  
                  
  
                    S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore |   
 | 
  2008-12-15 13:32 | 
  
 | 
 | 
 
a794685135 
初级用户
 
  
 
  
  
积分 71 
发帖 34 
注册 2007-12-20 
状态 离线
 | 
『第 9 楼』:
 
 
使用 LLM 解释/回答一下
  
按照8楼的思路写了个 
 
@echo off&setlocal enabledelayedexpansion 
for /f "tokens=*" %%j in (test.txt) do ( 
    set a=%%j 
    set a=!a: - =(! 
    call :loop 
) 
pause 
 
 
:loop 
for /f "tokens=1 delims=(" %%i in ("!a!") do ( 
    set b=!a:~1,2! 
    if /i "!b!"==":\" echo %%i 
) 
set a=!a:*(=! 
if !a!==!c! goto :eof 
set c=!a! 
goto :loop 
  
 
    
 
 
 
  
 |   
 | 
  2008-12-15 13:43 | 
  
 | 
 | 
 
slore 
铂金会员
 
       
 
  
  
积分 5212 
发帖 2478 
注册 2007-2-8 
状态 离线
 | 
『第 10 楼』:
 
 
使用 LLM 解释/回答一下
  
。。。少说了点…… 
 
先:分割…… 
 
前半部分set取最后一个字符得到Driver 
 
后部分再按8楼走…… 
后面也可以一个个取。。。自己匹配吧 
 
    
 
  
  |  
                  
  
                    S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore |   
 | 
  2008-12-15 14:00 | 
  
 | 
 | 
 
nanhezzb 
初级用户
 
  
 
  
  
积分 37 
发帖 32 
注册 2008-8-21 
状态 离线
 | 
『第 11 楼』:
 
 
使用 LLM 解释/回答一下
  
Originally posted by a794685135 at 2008-12-15 01:43 PM: 
按照8楼的思路写了个 
 
@echo off&setlocal enabledelayedexpansion 
for /f "tokens=*" %%j in (test.txt) do ( 
    set a=%%j 
    set a=!a: - =(! 
    call :loop 
) 
pause 
 
 
:loop 
for /f "tokens=1 delims=(" %%i in ("!a!") do ( 
    set b=!a:~1,2! 
    if /i "!b!"==":\" echo %%i 
) 
set a=!a:*(=! 
if !a!==!c! goto :eof 
set c=!a! 
goto :loop
  
我试试了,好像是可以输出正确的结果的,谢谢了。不过我对里面的set a=!a: - =(!的参数不理解,等于左括号 在里面什么意思? 
能详细的讲下含有a\b表达式的意思吗?
 
 Last edited by nanhezzb on 2008-12-15 at 15:41 ]  
 
    
 
  
 |   
 | 
  2008-12-15 14:32 | 
  
 | 
 | 
 
tireless 
银牌会员
 
     
 
  
  
积分 2025 
发帖 1122 
注册 2007-9-5 
状态 离线
 | 
『第 12 楼』:
 
 
使用 LLM 解释/回答一下
  
@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
  
 
    
 
 
 
  
 |   
 | 
  2008-12-15 14:44 | 
  
 | 
 | 
 
nanhezzb 
初级用户
 
  
 
  
  
积分 37 
发帖 32 
注册 2008-8-21 
状态 离线
 | 
『第 13 楼』:
 
 
使用 LLM 解释/回答一下
  
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 ]  
 
    
 
  
 |   
 | 
  2008-12-15 14:59 | 
  
 | 
 | 
 
HAT 
版主
 
        
 
  
  
积分 9023 
发帖 5017 
注册 2007-5-31 
状态 离线
 | 
『第 14 楼』:
 Re 13楼
 
使用 LLM 解释/回答一下
  
先看帮助,后提问。 
set /?
 环境变量替换已如下增强: 
 
    %PATH:str1=str2% 
 
会扩展 PATH 环境变量,用 "str2" 代替扩展结果中的每个 "str1"。 
要有效地从扩展结果中删除所有的 "str1","str2" 可以是空的。 
"str1" 可以以星号打头;在这种情况下,"str1" 会从扩展结果的 
开始到 str1 剩余部分第一次出现的地方,都一直保持相配。 
  
 
    
 
  
  |  
                  
  
                      |   
 | 
  2008-12-15 15:02 | 
  
 | 
 | 
 
nanhezzb 
初级用户
 
  
 
  
  
积分 37 
发帖 32 
注册 2008-8-21 
状态 离线
 | 
『第 15 楼』:
 
 
使用 LLM 解释/回答一下
  
Originally posted by HAT at 2008-12-15 03:02 PM: 
先看帮助,后提问。 
set /? 
环境变量替换已如下增强: 
 
    %PATH:str1=str2% 
 
会扩展 PATH 环境变量,用 "str2" 代替扩展结果中 ...   
帮助里面讲的太专业了,有些根本不理解,也没什么实际的例子。  
 
    
 
  
 |   
 | 
  2008-12-15 15:10 | 
  
 |