在我的批处理脚本中设置“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
^!之前给了我:他妈的
^^!以前给我:失败者
答案 0 :(得分:0)
每次进入:SPAM
部分,:MESSAGE
部分再次通过GOTO调用。
将setlocal enabledelayedexpansion
放在批次的开头