2014-02-20 2 views
0

Я получаю сообщение об ошибке «Максимальная глубина рекурсии» после установки «setlocal enabledelaydexpansions» в моем скрипте Batch. Я уже читал 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» после этого модуля скрипта, но не повезло. Надеюсь, это была небольшая ошибка.

EDIT:

Да, это похоже на работу, но я не могу использовать восклицательные знаки в настоящее время :( я поставил disabledelayedexpansion перед входом% сообщение% из-за этого

Я также видел в настоящее время. что этот скрипт создает больше проблем, чем я думал.Применение ^! вызывает значение переменной% 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 

^! дает мне раньше: fuck

^^! дает мне раньше: loser

ответ

0

Каждый раз, когда вы идете в часть :SPAM, часть :MESSAGE вызывается через GOTO снова.

Поместите setlocal enabledelayedexpansion в начало вашей партии

Смежные вопросы