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.

从这些行中,我只需要捕获一行:

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

1 回答 1

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"
于 2013-10-29T05:17:50.470 回答