简短版
有人可以帮我从这样的字符串中提取:
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%
谢谢。
答案 0 :(得分: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"