2014-02-20 5 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을 넣습니다.