2014-02-20 44 views
0

在我的批處理腳本中設置「setlocal enabledelaydexpansions」後,出現「超出最大遞歸深度」錯誤。我已經閱讀http://ss64.com/nt/setlocal.html,但無法弄清楚如何解決這個問題。這是導致這個問題的腳本。由setlocal enabledelayedexpansion引起的最大遞歸深度? (BATCH)

..

...

:MESSAGE 
set /p "message=Message:" 

setlocal enabledelayedexpansion 

:ANALYSIS 

if "%message%"=="%spam%" (
set /a counter=%counter% + 1 
if !counter! GTR 2 (
goto :SPAM 

) ELSE (
GOTO OK 
) 

) ELSE (
set counter=0 
GOTO OK 
) 

:SPAM 
echo. 
echo stop spamming 
echo. 
GOTO MESSAGE 

:OK 
set "spam=%message%" 

...

..

我試過在這個腳本模塊後面設置「setlocal disabledelayedexpansion」,「endlocal」但沒有運氣。希望這只是我犯的一點小錯誤。

編輯:

是的,這似乎工作,但現在我不能使用感嘆號:( 我進入,因爲這個消息%之前%設定disabledelayedexpansion

我現在也看到了。這個腳本會產生更多的問題,然後我想,鍵入^!提示後面在腳本中定義的%message%變量的值,鍵入^^!會帶來下一個改變%message%的條目。 :

REM Bad word filter with Format change for catching mutated vowels 

chcp 1252>nul 

SET before=%message% 
SET message=%before:fuck=XXXXX% 

SET before=%message% 
SET message=%before:loser=XXXXX% 

chcp 850>nul 

^!給我之前:他媽的

^^!給我之前:失敗者

回答

0

每次進入:SPAM部分時,:MESSAGE部分再次通過GOTO調用。

setlocal enabledelayedexpansion放到批次的開頭