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%
谢谢。