2017-07-04 63 views
1

這個問題之間計數字符串外觀非常相似this question.批次 - 兩種模式


我一直堅持努力算一個字符串多少顯得括號內。考慮後續文本文件(雖然它看起來像一個蝙蝠腳本)

(
echo a 
echo b 
echo c 
) 
echo z 

在上面的文件中,我們可以看到4 echo,但我只想算括號內的那些(結果應該是3 )


for /f "delims=][ tokens=2" %%H in ('FART.exe -c -i -p %File% ^(a') do set /a count+=1 

此代碼的工作,但只計算1,因爲我無法弄清楚如何計算多次出現。請幫助我,任何幫助將不勝感激。


編輯 - 17年5月7日

你可以假設

  • 將只有1 echo每行。
  • 括號不能嵌套
  • echo不會出現在同一行括號
    • 獎金,如果你可以讓你的腳本在同一行括號算echo
+0

。一條線上可以有多個ECHO嗎?括號可以嵌套嗎? ECHO能否與括號出現在同一行上? – dbenham

+0

@dbemham很好的問題,我會編輯我的帖子。 – SteveFest

回答

1

對於那些期待一個批處理文件,誰比SteveFest有更多的尊重規則,這裏是一個基本的例子,(可能不是最高效的,但嘿這種任務不會被設計爲大文件)

@Echo Off 
For /F "Tokens=1*Delims=:" %%A In ('FindStr/N $ "%~n0.txt"') Do (
    If "%%B"=="(" If Not Defined FL Set/A FL=%%A+1 
    If "%%B"==")" If Not Defined LL Set/A LL=%%A-1) 
Set "i=0" 
If FL LEq LL For /L %%A In (%FL%,1,%LL%) Do For /F "Tokens=1*Delims=:" %%B In (
    'FindStr/N $ "%~n0.txt"') Do If "%%B"=="%%A" If Not "(%%C"=="(" Set/A i+=1 
Echo([%i%] 
Timeout -1 
+0

該解決方案適用於我,但我也注意到代碼中的拼寫錯誤 - 「Tokens = 1 * Delims =:」應該改變。 – SteveFest

+0

我的腳本是正確的,每個這些位置的額外空格字符不是必需的! – Compo

+0

這很奇怪,在我的Win10上,如果沒有這兩個選項之間的空間,它將無法正常工作。 – SteveFest

1

你可以試試這個正則表達式:

echo(?=((?!\().)*\)) 

內支架上的字「迴響」的比賽數量將是您的數

Regex101 Demo

由於,Windows批處理將不支持向前看符號因此你可以使用Python腳本爲了同樣的目的,而不是使用批,如果你要申請正則表達式。除此之外,您可以嘗試在批次非正則表達式的解決方案

此塊會做什麼:(run here

regex = r"echo(?=((?!\().)*\))" 
matches = re.finditer(regex, test_str, re.DOTALL) 
count=0 

for match in matches: 
     count +=1 
print(count) 

其中test_str是該文件的內容

+0

讓我在'findstr'中測試這個,稍後會將結果報告給你。 – SteveFest

+0

這似乎在工作[標籤:慶典],沒有[標籤:批處理文件],批處理文件的正則表達式的支持是窮人...... – SteveFest

+1

哦傷心,然後,可以使用Python出於同樣的目的,而不是使用批處理腳本,如果你必須申請正則表達式。除此之外,你可以嘗試批量使用非正則表達式解決方案 –

1

你的規格是不完整的,因爲,如前所述,這個問題可以簡化爲:計數左括號和右括號之間的行數:您沒有正確定義您的問題

@echo off 
setlocal 

set "open=" 
for /F "delims=:" %%a in ('findstr /N "()" test.txt') do (
    if not defined open (
     set "open=%%a" 
    ) else (
     set /A count=%%a-open-1 
    ) 
) 
echo %count% 
+0

我打算用** **正是這種想法,但不能忽視的可能性在開放之前,在它自己的一行中存在的右括號。我也意識到它會輸出括號之間的行數,而不是它們之間的條目數。 – Compo