我想使用批处理脚本编写游戏,但是出现错误,我不知道该怎么做。
@echo on
goto log
:inicio
set "esquerda=caverna"
set "esquerda2=6"
set /p "run=Digite a acao: "
if %run%==help (
goto help) else (
goto comands)
:carvena
echo oi>"%userprofile%\desktop\oi.txt"
pause>nul
:comands
echo %run% >"%tmp%\reino_de_merlock\personagem\comands.txt"
cd "%tmp%\reino_de_merlock\personagem"
type comands.txt | find /i "andar_esquerda" && echo andar>andar_esquerda.txt
if exist andar_esquerda.txt (
set "andar=esquerda1"
del /q andar_esquerda.txt
goto andar1)
:log
for /f %%a in ('type "%tmp%\reino_de_merlock\personagem\agilidade.txt"') do (
set "agilidade=%%a" & goto inicio)
:andar1
if "%andar%" == "esquerda1" (
set /a andar = agilidade - esquerda2
if %andar% LEQ 0 (
goto %esquerda%)) 1>nul 2>nul
pause>nul
错误在set /a andar = agilidade - esquerda2
,变量变为esquerda1,右边变为-2,错误是什么?
答案 0 :(得分:1)
在块语句(a parenthesised series of statements)
中,解析整个块并执行然后。在执行块之前,块中的任何%var%
将被解析块时的变量值替换。
因此,IF (something) else (somethingelse)
将在遇到%variables%
时使用IF
的值执行。
解决此问题的两种常见方法是1)使用setlocal enabledelayedexpansion
并使用!var!
代替%var%
来访问已更改的var
或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。
在你的情况下,
if %andar% LEQ 0 (
goto %esquerda%)
包含在启动的块中
if "%andar%" == "esquerda1" (
因此使用andar
和esquerda1
的值与达到if "%andar%" == "esquerda1"
时的值相同,而不是andar
计算中的新值< / strong>循环。
在'延迟扩展'上寻找许多SO条目