setlocal enabledelayedexpansion导致超出最大递归深度? (批量)

时间:2014-02-20 14:11:42

标签: batch-file recursion depth

在我的批处理脚本中设置“setlocal enabledelaydexpansions”后,我收到错误“超出最大递归深度”。我已阅读http://ss64.com/nt/setlocal.html但无法弄清楚如何解决此问题。以下是导致此问题的脚本。

...

...

: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”但没有运气。希望这只是我犯的小错误。

修改

是的,这似乎有效,但我现在不能使用感叹号:( 因此,我在输入%message%之前设置了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

^!之前给了我:他妈的

^^!以前给我:失败者

1 个答案:

答案 0 :(得分:0)

每次进入:SPAM部分,:MESSAGE部分再次通过GOTO调用。

setlocal enabledelayedexpansion放在批次的开头