2013-10-29 166 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"