2015-10-03 480 views
1

在視窗的命令行腳本我有字符串變量中的示例:cmd:如何提取部分字符串?

AB_CD RR CRR LH 8AH_M22 1.1 2050_gra.pdf

其是文件名,其中,I需要提取到一個不同的變量字符串(在這種情況)2050(用戶輸入的時間)。

它的左側至少有一個空格(通常是三個),右側總是加上_gra.pdf。

它不總是4位數字,有人可能會用點或逗號分隔小時和分鐘。因此,它也可能是這樣的:

  • 20.50
  • 20,50
  • 20,50
  • 8.50
  • 8,50
  • 08.50
  • 08,50

基本上是_gra.pdf和左邊最近的空間之間的任何東西。

回答

4
set "x=AB_CD RR CRR LH 8AH_M22 1.1 2050_gra.pdf" 

REM get last element: 
for %%i in ("%x: =" "%") do set last=%%i 
rem split it by `_`: 
for /f "Tokens=1 delims=_" %%i in (%last%) do set utim=%%~i 
echo %utim% 

編輯:滿足「提取_M和一個空格之間的任何」:

set "x=AB_CD RR CRR LH 8AH_M 22 1.1 2050_gra.pdf" 
REM delete anything until (including) "_M": 
for %%i in ("%x:*_M=%") do set "y=%%i" 
REM get string until next space: 
for /f "Tokens=1" %%i in (%y%) do set "utim=%%~i" 
echo %utim% 
+0

大。這對我幫助很大!現在有什麼想法(爲了改進)如何在M之後提取任何東西,直到下一個空格爲止?在這種情況下提取22就足夠了。 那些for循環沒有對我說什麼:/ – RoSi

+0

多一點信息會有幫助。是唯一的'M'或者可能會有更多? '_M'會可靠嗎?還是有相同數量的元素(用空格分隔)?或者相同的Count由下劃線分隔? – Stephan

+0

_M將是可靠的。所以如果我們在_M和下一個空間之間抽取任何東西,那就太棒了。但是,可能有_M1和_M22(最多2位數字)。 – RoSi