2013-10-29 117 views
1

短版的提取部分批处理文件:使用特殊字符的字符串

有人可以帮我从这样的字符串中提取:

HDAUDIO\FUNC_01&VEN_10EC&DEV_0892&SUBSYS_18492892&REV_1003\4&2120120&0&0001: Realtek High Definition Audio 

只有第二个反斜杠之前部分(\) :

HDAUDIO\FUNC_01&VEN_10EC&DEV_0892&SUBSYS_18492892&REV_1003 

困难的部分是,数字是不是恒定的,可以是不同的,这同样适用于串的总长度,唯一不变的是它有2个斜线,我需要第二个斜线之前的部分(第二斜线以及必须移除后的所有内容)

谢谢。


龙版 如果你有兴趣

我试图获取由另一个应用程序返回一个字符串的一部分:

devcon.exe find "HDAUDIO\FUNC_01" 

它返回是这样的:

HDAUDIO\FUNC_01&VEN_10DE&DEV_0018&SUBSYS_10DE0101&REV_1001\5&13022D22&0&0201: NVIDIA High Definition Audio 
HDAUDIO\FUNC_01&VEN_10EC&DEV_0892&SUBSYS_18492892&REV_1003\4&2120120&0&0001: Realtek High Definition Audio 
HDAUDIO\FUNC_01&VEN_10DE&DEV_0018&SUBSYS_10DE0101&REV_1001\5&13022D22&0&0101: NVIDIA High Definition Audio 
3 matching device(s) found. 

从th ESE行,我需要捕捉只有一行:

HDAUDIO\FUNC_01&VEN_10EC&DEV_0892&SUBSYS_18492892&REV_1003\4&2120120&0&0001: Realtek High Definition Audio 

,并从该行,我需要得到的只是这一部分:

HDAUDIO\FUNC_01&VEN_10EC&DEV_0892&SUBSYS_18492892&REV_1003 

不幸的是这条线可以在不同的系统不同,唯一一致的部分是开头:

HDAUDIO\FUNC_01&VEN_10EC&DEV_ 

而且它有两个斜线。 这意味着唯一可用于加密字符串的键是第二个反斜杠 - 第二个“\”之后的任何内容都必须删除。

到目前为止,我能得到所需要的整条生产线,但我无法弄清楚如何需要的部分提取出该行:

@echo off 
@setlocal enabledelayedexpansion 
FOR /F "tokens=* USEBACKQ" %%F IN (`devcon.exe find "HDAUDIO\FUNC_01&VEN_10EC"`) DO (
set string=%%F 
set match=!string:HDAUDIO\FUNC_01^&VEN_10EC^&DEV_=! 
if not !match!==!string! goto found 
) 
endlocal 
:found 
set str="%string%" 
set id=!str:~1,-1! 
set id=!id:^&=^^^&! 
echo %id% 

此处作为一例是检查的一部分代码:

set string="HDAUDIO\FUNC_01&VEN_10EC&DEV_0892&SUBSYS_18492892&REV_1003\4&2120120&0&0001: Realtek High Definition Audio" 
set str=%string% 
set id=!str:~1,-1! 
set id=!id:^&=^^^&! 
echo %id% 

谢谢。

回答

4
@echo off 
set "string=HDAUDIO\FUNC_01&VEN_10EC&DEV_0892&SUBSYS_18492892&REV_1003\4&2120120&0&0001: Realtek High Definition Audio" 
for /f "tokens=1,2 delims=\" %%a in ("%string%") do echo "%%a\%%b"